begin process at 2012 05 29 03:27:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Autre

 > 

Gestion des execptions et GCC


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Gestion des execptions et GCC

mardi 11 juillet 2006 à 14:04:58 | Gestion des execptions et GCC

skirby

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 ...


Merci d'avance.
mardi 11 juillet 2006 à 16:07:22 | Re : Gestion des execptions et GCC

luhtor

Il me parait nécessaire que tu apprennent deja ce qu'est une exception et comment ca fonctione. Une exception, ca fonctionne toujours, si elle existe.
mardi 11 juillet 2006 à 16:40:32 | Re : Gestion des execptions et GCC

BruNews

Administrateur CodeS-SourceS
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.

ciao...
BruNews, MVP VC++
mardi 11 juillet 2006 à 16:48:52 | Re : Gestion des execptions et GCC

skirby

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 <iostream>

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);
    }

    delete [] tab1;

    return(0);
}

Merci d'avance.
mardi 11 juillet 2006 à 17:06:49 | Re : Gestion des execptions et GCC

skirby

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.

mardi 11 juillet 2006 à 18:37:37 | Re : Gestion des execptions et GCC

luhtor

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.
mardi 11 juillet 2006 à 19:13:56 | Re : Gestion des execptions et GCC

BruNews

Administrateur CodeS-SourceS
ben alors désactives les et tu pourras faire:
tab1 = new int[700000000];
if(!tab) JeSorsOuAutre();
au moins 200 cycles de gagnés.

J'adore le "gracefully"... on se moque du monde.

ciao...
BruNews, MVP VC++
mardi 11 juillet 2006 à 19:49:14 | Re : Gestion des execptions et GCC

luhtor

Oue mais il s'agit un tutoriel la :) l'exemple est forcément débile.


mercredi 12 juillet 2006 à 11:17:03 | Re : Gestion des execptions et GCC

skirby

L'exemple est d'autant plus stupide que j'ai adapté vite fait "bien fait" un exemple trouvé sur le Net (d'ou le "gracefully" tant aprécié par BruNews)

En tout cas merci pour vos réponses.


Cette discussion est classée dans : gcc, gestion, try, catch, execptions


Répondre à ce message

Sujets en rapport avec ce message

try catch [ par raphael59540 ] <img src="/imgs2/smile_question.gif" afficher le contenu d'une 'exception en c++ [ par wislam2007 ] Salut j'ai un try catch que je doit gérer : [code=cpp]try{ }catch(exception e){ // je veux afficher le contenu de l'exception : je fait e.what() mais Try/Catch [ par Jojo73450 ] Salut à tous ! Un problème tout bête mais j'ai passé la journée dessus (argg!!!!) alors je me décide à poster, ne trouvant aucune réponse... Applica Gestion d'exceptions [ par Ravaner ] Bjr à tous,Dans un de mes pgm j'ai une exception EJPEG Erreur JPEG #52, dont je connais la cause, là n'est pas le pb. J'ai essayé de la piéger avec Tr Trois erreurs: TypeNameExpected ; Catch statement missing ) ; Compound statement missing }. [ par ProgVal ] void __fastcall TForm1::Button1Click(TObject *Sender){    try    {        String nf;        nf="C:\Documents and Settings\raymond\Menu Démarrer\Progra Gestion d'une école [ par Romerocharvet ] du code source en Langage c " Gestion d'une école"-Les fichiers-Les Listes-Les poiteurs... merci Gestion des doublons [ par kj_83 ] Boujour , je travaille sur un programme (en C++ avec Builder) de gestion de stock avec une base de donnée (Access) ,dans ce programme l'utilisateur pe Gestion de la mémoire [ par DMK04 ] Salut,Je me demandais un truc sur la gestion de la mémoire. Je ne vois pas trop comment l'expliquer simplement et rapidement, voici donc un peu de cod Gestion des doublons [ par kj_83 ] Bonjour J'aimerais savoir comment gérer les doublons dans une base de donnée Access qui contient entre autre une table produit avec 2 champs  :  NomPr Complier un programme pour DOS [ par themioux ] SalutJe cherche à compiler un programme pour qu'il fonctionne sous DOS à partir d'un PC sous LinuxA savoir, je travaille sur une architechture i686 et


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales