Bonjour à tous,
Depuis 12 ans que je fais du C++ Builder (5 en l'occurence), je pensais tout savoir (ou presque) sur le try/catch, mais là je dois maintenir du code qui ne m'appartient pas et j'en perd un peu mon latin.
Il s'agit d'un exécutable C++ sans la VCL, et c'est là que tout se complique. Je l'ai reproduit en faisant une application console (nouveau projet/expert console/décocher VCL) et ça donne le code suivant :
Je m'attendais à ce que le programme retourne 1, 2 à la rigueur. Et bien non, il retourne 3 à tous les coups. En revanche, si on rajoute la VCL, tout fonctionne comme je m'y attendais, mais ce n'est pas possible dans le cas de mon vrai projet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #pragma hdrstop #include <exception> #include <excpt.h> #pragma argsused int main(int argc, char* argv[]) { __try { try { int i = 0; int j = 1; int k = j / i; //ici on va planter car on divise par 0 return k; } catch (std::exception &e) { return 1; } catch (...) { return 2; } return 0; } __except(EXCEPTION_EXECUTE_HANDLER) { return 3; } }
Quelle en est la raison ? La doc sur le __try/__except n'est pas très verbeuse, internet non plus. Est-ce un problème du langage ? du compilateur ? ou est-ce normal ?
Partager