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 :

Probleme avec gcc


Sujet :

C++

  1. #1
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut Probleme avec gcc
    Bonjour,

    J'ai des centaines de message de warning à la compile à cause de l'attribue "warm_unused_result" qui me génére un warning pour toutes les fonctions standard non void. C'est agacant et les autres warning plus important sont noyés dedans.

    Comment pourrais-je désactivé cette option?

  2. #2
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    man gcc /warn_unused_result et tu aurai trouvé l'option qui va bien...

    L'option en question c'est -Wno-unused-result. Et sinon c'est en général une mauvaise idée. La valeur de retour de ces fonctions indiquent si la fonction s'est bien passé ou pas, donc il est extrèmement important de le vérifier. De plus, si tu as des centaines de warning, ça tend à prouver que tu utilise trop l'api C, et pas assez d'abstraction C++.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Cet avertissement te préviens que tu ne récupère pas la valeur des fonctions non void.

    En toute logique, si une fonction renvoie quelque chose, c'est parce que la valeur retournée est... intéressante pour la fonction appelante, ne serait-ce que parce qu'elle représente la réussite ou la raison de l'échec de la fonction, ou parce que la fonction appelante a besoin de cette valeur pour travailler.

    L'idéal serait donc, partout où cet avertissement survient, de veiller à effectivement récupérer la valeur de retour de la fonction et à gérer, au minimum, le cas de la réussite (qui permet de "faire la suite") et le cas général de l'échec

    Ce type d'avertissement est occasionné par l'option -Wunused-return, qui est activée, entre autres, par l'options -Wunused, elle même activée -Wall (options valables pour Gcc-.

    Tu peux donc envisager de désactiver ces avertissements en rajoutant (toujours sous Gcc) l'option -Wno-unused-result, mais, tu comprendra que je conseille fortement de plutôt choisir la première option, qui consiste à effectivement récupérer et gérer le retour de toutes les fonctions
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Merci de vos réponses.
    Effectivement j'ai enormément de fonction C tel "sscanf", "fget".
    Le flag "Wno-unused_result" me va totalement en me suppriment tous ces warning.
    Même si je suis conscient qu'ils peuvent avoir leurs utilité, ils n'était pas présent dans le gcc < 4.4.0.

  5. #5
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    fgets peut être probablement facilement remplacer par getline.
    sscanf par des ostringstream ou par des choses plus haut niveau, en fonction de la sémantique derrière (ça pourrait être remplacé par boost::serialization si il s'agit d'une opération de sauvegarde / lecture d'une structure).

    De plus, il est franchement impossible d'utiliser sscanf sans vérifier la valeur de retour. Comment peux-tu savoir que ta ligne à matcher ce que tu attends si tu ne le vérifie pas ? Comment peux-tu être sûr par la suite de ne pas utiliser une variable non initialisé ?

    De même, pour fgets, comment gère tu les fin de fichiers si tu ne lis pas le retour de la fonction (et je ne parle pas de tous les autres cas d'erreurs qui peuvent arriver). ?

    Ces warning ne sont pas là pour "faire chier le monde", mais parce qu'il signale potentiellement des choses qui vont dans le future provoquer des comportements indéterminées. Donc, je répète, il serait bien mieux de les corriger, pas de les masquer (et même si gcc < 4.4.0 ne les indiquait pas, il n'est jamais trop tard pour corriger le code).

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    J'ai des centaines de message de warning à la compile à cause de l'attribue "warm_unused_result" qui me génére un warning pour toutes les fonctions standard non void. C'est agacant et les autres warning plus important sont noyés dedans.
    -U_FORTIFY_SOURCE si j'ai bonne mémoire.

    Citation Envoyé par zul Voir le message
    man gcc /warn_unused_result et tu aurai trouvé l'option qui va bien...

    L'option en question c'est -Wno-unused-result. Et sinon c'est en général une mauvaise idée. La valeur de retour de ces fonctions indiquent si la fonction s'est bien passé ou pas, donc il est extrèmement important de le vérifier. De plus, si tu as des centaines de warning, ça tend à prouver que tu utilise trop l'api C, et pas assez d'abstraction C++.
    C'est en théorie une très mauvaise idée d'ignorer ces warnings qui ne sont générés que pour des fonctions marquées comme devant les générér. Mais le problème est que la libc de GNU a marqué trop de choses, sous contrôle d'un ifdef, d'une part, et d'autre part que certaines distributions ont activé cet ifdef par défaut.

    (et même si gcc < 4.4.0 ne les indiquait pas, il n'est jamais trop tard pour corriger le code).
    C'est pas lié à la version de gcc (qui a ce mécanisme depuis la 3.4).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    tout à fait d'accord, mais quand on a gérer un code de dizaines de millier de lignes, constiuté de c, cpp, fortran datant parfois de 20 ans, on fait au mieux pour que ca continu à fontionner et les belles ambitions de perfection sont passé au second plan.

Discussions similaires

  1. Probleme avec gcc(Débutant)
    Par Freedom57 dans le forum Débuter
    Réponses: 2
    Dernier message: 02/12/2010, 16h03
  2. Probleme avec gcc
    Par nightmare06 dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 09/10/2007, 19h34
  3. Problem avec gcc 4
    Par Arthuris dans le forum GCC
    Réponses: 3
    Dernier message: 23/04/2007, 15h05
  4. Problème de compilation avec gcc
    Par Niktou dans le forum Linux
    Réponses: 9
    Dernier message: 27/09/2005, 15h18
  5. Problème avec l'option -static de gcc
    Par lsdInside dans le forum Linux
    Réponses: 2
    Dernier message: 08/05/2004, 01h01

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