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 :

assertions comment s'en servir ?


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut assertions comment s'en servir ?
    Salut on m’a dit que les assertions peuvent être utile pour savoir exactement ou une erreur s’est produite dans le programme. Comment on s’en sert ?
    Merci.

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Le piege avec les assertions c'est de les confondre avec la gestion d'erreurs.
    Il s'agit juste de reperer des erreurs de programmation, si le test effectué par l'assertion est trop dependant de données "externes" (ex: ce que rentre un utilisateur), c'est pas bon

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    En effet, les assertions servent typiquement à tester des invariants. Si tu as fait un peu de génie logiciel, de conception, tu sais ce qu'est le contrat d'une fonction, ce que sont les préconditions et postconditions. Les assertions sont bien pour vérifier que ces conditions sont respectées, indépendamment de toute influence extérieure.

    L'assertion sert à tester quelque chose qui ne peut pas échouer. Si ça peut échouer, ce n'est pas une assertion qu'il faut mettre, mais une vraie gestion d'erreurs.
    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.

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut
    Est ce que cet exemple est correct ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    FILE* ouvrir_fichier()
    {
    	FILE *fichier_section=NULL;
     
    	fichier_section=fopen("section.dat","w");
    	//teste le pointer fichier_section et stoppe l'exectuion 
    	//si il est égal a NULL
    	assert(fichier_section!=NULL);
     
    return fichier_section;

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    C'est typiquement un mauvais exemple. Une erreur à l'ouverture d'un fichier n'est pas une erreur de conception, elle arrivera forcément un jour ou l'autre.
    Dis toi bien que les assertions sont un outil de debug; elles sont supprimées quand on passe en release. Dans ton cas cela signifie qu'il n'y aura plus de test.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Non : Il est normal qu'une ouverture de fichier échoue (influence extérieure).

    Ceci est plus correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /** \brief Extrait des données du fichier ouvert.
            \param fichier_section : flux d'où extraire les données. Ne doit pas être NULL.
    */
    void traiter_fichier(FILE *fichier_section)
    {
    	assert(fichier_section!=NULL);
     
    	/* ... */
    }
     
    void UneFonction(void)
    {
    	FILE *fich = fopen( ... );
    	if(fich != NULL)
    	{
    		traiter_fichier(fich);
    		fclose(fich);
    	}
    }
    Là, l'assertion ne peut pas échouer. Si elle échoue quand même, c'est que quelqu'un a oublié de tester fich avant d'appeler tester_fichier.
    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.

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut
    et on ne peut pas utiliser un autre truc de gestion d'erreurs genre si le l'ouverture a echoué alors il stoppe le programme et affiche un message d'alerte ?

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    si bien sûr..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (fichier_section == NULL )
    {
     fprintf ( stderr, "ERREUR OUVERTURE FICHIER");
      return ;  /* exit(1) si tu veux sortir */
    }

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Par défaut
    c quoi stderr ?

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par isoman
    c quoi stderr ?
    C'est le flux standard d'erreur ... les trois flux standard:
    • stdin
    • stdout
    • stderr
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. Fichier ini comment s'en servir ?
    Par yaumme dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/01/2007, 19h00
  2. [VBA-E] Mode L1C1 comment s'en servir
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/10/2005, 18h08
  3. Que sont les StringTables et comment s'en servir?
    Par Crisanar dans le forum Windows
    Réponses: 6
    Dernier message: 05/11/2004, 16h57
  4. [PowerAMC] Comment s'en servir pour creer une base?
    Par Elmilouse dans le forum Access
    Réponses: 2
    Dernier message: 27/07/2004, 09h53
  5. comment peut se servire d'une Api en delphi
    Par maamar dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 22/02/2003, 10h31

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