Il y a t'il une "fonction" qui gererai les erreurs en C ?
Comme par exemple en Visual Basic "On Error", je ne sais pas si ca s'appelle une fonction, si qqn a le nom exacte pour ma culture generale ca m'interesse.
Puis il y aurait pas une variable structurée en meme temps ?
Exemple encore en VB : Err.***.
Je suppose que tu parles de la gestion des "exceptions" (try, catch, ...), que la syntaxe du C ne supporte pas.
EDIT: C'est à toi de tester pour éviter les problèmes; certaines bibliothèques (je pense à GTK) utilisent un modèle "objet" et implémentent leur propre système d'exceptions.
Enfin, je crois.
Ce dont je parlais c'est par exemple, on place 300 dans une variable Byte ca provoque une erreur, bon je fais un code exemple on comprendra mieux :
Sub MaFunction()
Dim variable As Byte
On Error Goto ErreurDansMaFunction
variable = InputBox ("Question ?" ) ' supposons que l'utilisateur rentre 300
' ceci provoque l'erreur 9 depacement de capacité provoquant ainsi
' un Goto vers Erreur dans ma Function
'code ...
Exit Sub
ErreurDansMaFunction:
MsgBox "MaFunction a eu l'erreur " & Err.Num & " ( " & Err.Desc & " )"
End Sub
Voila si jamais il y a une erreur ( un depacement de capacité dans mon exmeple), je peux la gerer comme bon me semble.
Je voudrais la meme chose en C et en C++
Message édité par Hrusdik le 29-08-2007 à 16:59:43
Ca s'appelle (justement) la gestion des exceptions (là, c'est la gestion des erreurs, une version low cost: la "vraie" (le terme exact est "structurée" ) gestion des exceptions existe aussi en VB: http://msdn2.microsoft.com/fr-fr/l [...] S.80).aspx )
La gestion des exceptions existe en C++, mais pas en C.
Je suppose que tu parles de la gestion des "exceptions" (try, catch, ...), que la syntaxe du C ne supporte pas.
En fait pas vraiment Disons, qu'on peut en faire avec setjmp, mais il ne faut pas l'utiliser, car ce n'est pas l'usage normal. Pour info, je donne un lien, mais je recommande encore de ne pas utiliser cette technique. Si c'est pour faire des exceptions, mieux vaut passer directement au C++ (même si ce que pour programmer en procédural).
http://www.di.unipi.it/~nids/docs/ [...] atch.shtml
Certains (et je trouve que c'est une bonne technique pour le C pur) s'impose de mettre un code d'erreur en retour de fonction. La liste des codes possibles étant mis dans des define (ou mieux des enum) pour savoir à quoi ils correspondent. Ceci impose de tester partout les retours de fonctions et de passer outre. On peut aussi utiliser une variable globale indiquant le statut de la dernière fonction (je n'aime pas trop cette technique, mais ça reste une bonne technique).
C'est dans le C ANSI ça? On dirait un truc crado tiré directement de l'assembleur...
En regardant vite fait sur le net, j'avais trouvé un truc dans le genre, mais je me suis dit "bah, un délire de programmeur, pas standard" et j'ai passé outre.
Vaut mieux utiliser les codes d'erreur pour remplir cette fonction...
EDIT: Je me coucherais un peu moins con ce soir, tiens
En fait pas vraiment Disons, qu'on peut en faire avec setjmp, mais il ne faut pas l'utiliser, car ce n'est pas l'usage normal. Pour info, je donne un lien, mais je recommande encore de ne pas utiliser cette technique. Si c'est pour faire des exceptions, mieux vaut passer directement au C++ (même si ce que pour programmer en procédural).
http://www.di.unipi.it/~nids/docs/ [...] atch.shtml
Certains (et je trouve que c'est une bonne technique pour le C pur) s'impose de mettre un code d'erreur en retour de fonction. La liste des codes possibles étant mis dans des define (ou mieux des enum) pour savoir à quoi ils correspondent. Ceci impose de tester partout les retours de fonctions et de passer outre. On peut aussi utiliser une variable globale indiquant le statut de la dernière fonction (je n'aime pas trop cette technique, mais ça reste une bonne technique).
Je crois que c'est ANSI C99.
Il suffit de mémoriser un contexte et de retourner sur ce contexte (y compris pour le pointeur d'instructions).
L'utilisation de ceci comme des exceptions C++, c'est, je trouve, très crado
------------------------------6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
crado mais pratique = vilain! très vilain! Interdit de faire des trucs crados tant que tu maitrise pas parfaitement un langage, non mais!
La syntaxe du C et du C++, c'est la même pour les trucs basiques; donc si tu veux utiliser les exceptions faut le faire en C++.
Va pas apprendre des trucs comme ça alors que tu débute!
EDIT: t'as tu pas honte, CRicky! Pervertir la jeunesse avec des horreurs pareilles!
Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois. Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.