Bonsoir
Je voudrais savoir ce que signifient les commandes " assert(0); (ou assert(false)) abort(); " à la fin d'un switch case ?
Bonne fin de soirée et merci d'avance
Bonsoir
Je voudrais savoir ce que signifient les commandes " assert(0); (ou assert(false)) abort(); " à la fin d'un switch case ?
Bonne fin de soirée et merci d'avance
Bonsoir,
assert() est une macro de diagnostic définie par la norme C qui signifie que l'on affirme qu'au stade où on la rencontre l'expression entre parenthèses doit en principe être vraie. Si c'est le cas, il ne se passe rien. Si elle est fausse, la macro interrompt le programme avec abort().
Dans le cas de assert(0) ou assert(false), l'expression est toujours fausse, et le programme sera toujours interrompu. À la fin d'un switch, cela signifie qu'en principe, tu dois toujours te trouver dans un des cas couverts par ce switch. Si tu arrives dans le cas « default », c'est que quelque chose d'imprévu s'est produit (et que c'est manifestement un bug).
Il est possible de désactiver le comportement normal d'assert() et ainsi faire en sorte qu'il n'ait aucun effet, quelque soit le résultat du test. Cela permet donc d'avoir un programme qui, lors du développement, s'arrête lors d'un cas non-prévu pour forcer le développeur à s'en préoccuper et à corriger ; lors de la mise en production, on désactive les assert() sans modifier le code et on se contente alors de logguer une alerte pour les quelques cas non détectés lors des tests.
En C, lorsqu'on ne connait pas une commande, on peut la chercher dans les pages de manuel (man pages) : http://www.developpez.net/forums/d13...nux-man-pages/
bonjour merci beaucoup pour ta réponse,elle est très utile pour moi
merci ta réponse m'a était très utile aussi, mais à propos du manuel oui je sais parce que sa sera plus facile à moi de lire un tuto mieux que poster et attendre la réponse,mais c'était ça ce que j'avais fais, j'ai cherché la signification de la commande assert et je l'ai comprise mais je n'ai pas compris le cas ou on met un 0 entre (), ou bien un false,en plus la je travaille sur un simulateur appelé glomosim, le code est en parsec, donc j'essaie de comprendre le minimum parce que la rien n'est clair pour moi.
La macro assert() est utilisée pour signaler des erreurs qui dépendent forcément d'une erreur dans le code. On utilise pas assert() pour une erreur dépendant de facteurs extérieurs (par exemple, une mauvaise saisie de l'utilisateur) car il ne s'agit pas d'une erreur récupérable.
En gros, assert() sert à tester une condition supposément toujours vraie. En fait, les deux codes suivants sont plus ou moins équivalents:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 assert(variable >= 1 && variable <= 3); switch(variable) { case 1: faireUnTruc(); break; case 2: faireUnAutreTruc(); break; case 3: faireEncoreUnAutreTruc(); break; }Ici, variable n'est pas censé être un truc saisi par l'utilisateur, mais un truc généré/calculé par le programme, et qui n'est pas censé avoir une valeur autre que 1, 2 ou 3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 switch(variable) { case 1: faireUnTruc(); break; case 2: faireUnAutreTruc(); break; case 3: faireEncoreUnAutreTruc(); break; default: assert(false); }
Donc, si jamais variable n'est pas égal à 1, 2 ou 3, ça veut dire qu'il y a une erreur dans le code qui l'a calculée.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
merci
Partager