try/catch vs __try/__except
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 :
Code:
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;
}
} |
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.
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 ?