skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007
-
11 juil. 2006 à 14:04
skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007
-
12 juil. 2006 à 11:17
Bonjour,
J'aurais voulu savoir si il était possible de gérer les execptions grace à l'instruction Try / Catch avec le compilateur GCC ?
Plus précisément, j'aimerai éviter les plantages sur les instructions du genre 1/0
D'après ce que j'ai compris, Try Catch fonctionne très bien par exemple sur des problèmes d'allocation mémoire, mais ne "fonctionne" plus dans le cas d'erreurs sévères comme la division par 0.
Donc, pour ceux qui connaissent Visual Basic, pour t'on avoir l'équivalent du On Error Goto ...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 juil. 2006 à 16:40
SI CODE POUR WINDOWS:
l'API ne lève jamais d'exception, inutile donc d'incoporer l'énorme masse de code qu'implique la gestion d'exception, tu éviteras de ruiner les performances. N'est utile que si tu pilotes des modules COM car eux en lèvent (à destination de vb et autres interprétés).
Division par 0 et autres plaisanteries de ce genre se gèrent dans le code, on vérifie avant l'opération. Un simple 'if' est nettement moins couteux que l'empilage de tous les registres et leur dépilage ultérieur.
skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007 11 juil. 2006 à 16:48
Merci luhtor d'avoir répondu.
Si je me base sur cette définition :
exception :
[programmation] Erreur dans le déroulement d'un programme, prévue lors de la conception, et gérée de main de maître (enfin, faut espérer). En fait, le programmeur est censé lui-même « lever une exception » pour détourner le déroulement normal de son programme.
Je dois en déduire qu'en fait il faut implicitement envoyer Throw pour générer une execption et donc gérér l'erreur qui aurait pu faire planter le programme.
Exemple:
int i = 0;
if (i == 0) throw("Division par Zéro");
Il n'existe donc pas d'équivalent à la commande On Error Goto label du VB.
C'est bien cela ?
Dans ce cas, quelqu'un peut-il m'expliquer pourquoi dans cette exemple l'execption est gérée toute seule sans avoir à appeler Throw ?
#include <windows.h>
#include
int main(int argc, char *argv[])
{
int *tab1;
try {
tab1 = new int[700000000];
}
catch (...) // Now we treat gracefully the argument errors!
{
MessageBox(0, "Error", "", 0);;
return(-1);
}
skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007 11 juil. 2006 à 17:06
Ok, je crois avoir compris.
J'ai jeter un oeil dans le livre de Richter
Dans la section C++ Exceptions Versus Structured Exceptions, j'ai trouvé ceci :
Catching Structured Exceptions with C++ Normally, C++ exception handling does not allow an application to recover from a hard exception such as an access violation or a division by 0. However, Microsoft has added this support to their compiler. For example, the following code will prevent the process from terminating abnormally:
GCC ne doit pas savoir gérer les execptions comme le compilateur de Microsoft.
Merci BruNews.
Vous n’avez pas trouvé la réponse que vous recherchez ?
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 11 juil. 2006 à 18:37
GCC sait tout a fait gérer les exceptions. Mais tu dois savoir que les
gas qui ont fait les lib du C++ ont inclu des exceptions, que tu
actives ou pas dans les paramètrages de la compilation. C'est pour ca
que ce code lève une exception sans que toi meme tu en es mis:
try {
tab1 = new int[700000000];
}
catch (...) // Now we treat gracefully the argument errors!
{
MessageBox(0, "Error", "", 0);;
return(-1);
}
Enfin je peux dire des bétises :) mais voici l'idée générale.