IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Explications des fonctions assert() et abort()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut Explications des fonctions assert() et abort()
    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

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 483
    Par défaut
    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).

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    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/

  4. #4
    Membre averti
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    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).
    bonjour merci beaucoup pour ta réponse,elle est très utile pour moi

    Citation Envoyé par Bktero Voir le message
    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 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/
    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 .

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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;
    }
    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);
    }
    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.
    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.

  6. #6
    Membre averti
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Explication des fonctions Left() et Mid() et le Chr(13)
    Par Adilleroy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/05/2010, 16h10
  2. Liste des fonctions
    Par Mookie dans le forum C
    Réponses: 2
    Dernier message: 22/09/2003, 16h42
  3. Des fonctions OGL pour les images de format usuel ?
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 31/05/2003, 21h59
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo