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 :

comment supprimer les warning 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 comment supprimer les warning gcc
    Bonjour,

    J'ai un bout de code en C++ compilé avec gcc et des warnings.
    Je voudrait supprimer les messages de warning à un endroit particulier du code C++. Mais je ne trouve pas les commande appropriées dy type "#pragma..." qu'ils faut inclure.
    Merci de votre aide

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne crois pas qu'il y ait d'équivalent à #pragma warning sous gcc: Il n'y a que les options pour désactiver les warnings à l'échelle d'une compilation entière.
    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.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Je voudrait supprimer les messages de warning à un endroit particulier du code C++.
    Salut,
    Si c'est dans ton code, tu as plutôt intérêt à voir pourquoi ils sont levés et comment les corrigés. Un warning génère souvent un bug ... au moment de la livraison.

  4. #4
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    #pragma GCC diagnostic warning "-Wformat"

    http://gcc.gnu.org/onlinedocs/gcc/Di...c-Pragmas.html


    Mais comme l'a dit 3DArchi, il vaut mieux les résoudre plutôt que les masqué. A moins que ça soit une bibliothèque tiers?
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Même si c'est une librarie tiers, je les laisserais.

  6. #6
    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

    J'ai des warning sous windows avec ce type de lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            #ifdef _WIN32
            fscanf(f,"%d %I64i %lf ",&n,&N0,&ms);
            #else
            fscanf(f,"%d %llu %lf ",&n,&N0,&ms);
            #endif
    je ne vois pas moyen de les éviter (pas faute d'avoir essayé)

    maintenant la command
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #pragma GCC diagnostic warning "-Wformat"
    ne semble pas empecher les warnings
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    warning: format '%I64i' expects type 'int', but argument 3 has type 'long long int
    Et malheureusement j'en ai des centaines.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    J'ai l'impression d'avoir déjà vu ce bout de code il n'y a pas si longtemps

    Et même la question. Ca frôle le mutlipost à trois mois de distance

  8. #8
    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
    Non pas de multipost ici
    Aujourd'hui, je m'interroge sur les commandes #pragram et comment supprimer les warnings

  9. #9
    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,

    Déjà, pourquoi utiliser fscanf alors que tu travailles en C++

    Ne pourrais tu pas, tout simplement, utiliser un flux classique et les opérateurs de flux classiques

    Sous réserve d'utiliser un flux C++ (parmi ifstream, stringstream,...) tu pourrais te contenter de
    qui s'adaptera quoi qu'il arrive au type correspondant aux variables n, NO et ms (y compris s'il s'agit de classes, à ceci près qu'il faudra définir l'opérateur >> pour celles-ci)
    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

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    Déjà, pourquoi utiliser fscanf alors que tu travailles en C++

    Ne pourrais tu pas, tout simplement, utiliser un flux classique et les opérateurs de flux classiques
    Un lourd passé historique hérité des intervenants précédents

  11. #11
    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
    Mais, le fait est que, en modifiant les "milliers de lignes de code" (qui, au passage, pourraient en partie du moins être modifiées automatiquement ), il s'éviterait bien des soucis par la suite...

    Et puis, rien n'empêche d'utiliser les fichiers "C style" à l'écriture et les flux à la lecture, si toutes les écritures sont faites (même si j'admets volontiers que ca n'est pas forcément l'idéal )
    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

  12. #12
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Mais, le fait est que, en modifiant les "milliers de lignes de code" (qui, au passage, pourraient en partie du moins être modifiées automatiquement ), il s'éviterait bien des soucis par la suite...

    Et puis, rien n'empêche d'utiliser les fichiers "C style" à l'écriture et les flux à la lecture, si toutes les écritures sont faites (même si j'admets volontiers que ca n'est pas forcément l'idéal )
    Sur le fond, je partage ton avis : probablement que les lignes seraient déjà remplacées au vue des questions qu'elles ont générées. Mais, après, il n'a peut être pas le choix : question de risque + coût -> + de code modifié = + de risque de bug = couverture de test plus importante = + cher .

  13. #13
    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
    Citation Envoyé par 3DArchi Voir le message
    Sur le fond, je partage ton avis : probablement que les lignes seraient déjà remplacées au vue des questions qu'elles ont générées. Mais, après, il n'a peut être pas le choix : question de risque + coût -> + de code modifié = + de risque de bug = couverture de test plus importante = + cher .
    Honnetement, je ne crois pas...

    Les risques sont largement moindre par l'utilisation des flux, ne serait-ce que parce qu'il supprime celui de se tromper de format dans les fprintf fscanf...

    En utilisant les flux, tu supprime la compilation conditionnelle selon un ratio minimum de 5 lignes supprimées pour une ligne écrite, ce qui rend le code bien moins complexe

    Les tests d'écriture et de leture ne sont au final pas modifié: tu crées une structure donnée, tu l'écris dans le fichier, tu teste la récupération de la structure en lecture

    De plus, j'ai du mal à concevoir que cela puisse représenter des "milliers de lignes de code" à modifier: à coup de 6 lignes (la déclaration et l'ouverture du fichier qui devient une déclaration du flux correspondant et les 5 lignes de compilation conditionnelles) à modifier par fonction, de deux fonction par structure, il faudrait déjà arriver à 100 structures à modifier pour arriver seulement à 1200 lignes (qui se transformeraient en 400 lignes de code)

    Le risque de problèmes dans un programme tient bien plus de la complexité du code (qui est exponentielle par rapport au nombre d'instructions) que de la modifcation du code...

    De ce point de vue, tu limite bien plus les risques en modifiant correctement ton code qu'en ne le le faisant pas
    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

  14. #14
    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
    Ok, mon but n'est pas de faire un code super propre pur C++, il conteint du C++ du C du fortran95 et même du fortran77.
    Non, actuellement il est robus, presque exent de bug (long long travail de plusieur années) et surtout il est trop utilisé par la communauté (scientifiques) pour que je prennent le risque aujourd'hui de de le remanier completement ou en partie.
    Je l'ai optimisé pour enlever tous les warning de maniére à le maintenair plus facilement, il ne me reste que celui que je vous ai indiqué précedemment (des milliers). J'aimerai votre aide pour le retirer le plus proprement possible.

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Ok, mon but n'est pas de faire un code super propre pur C++, il conteint du C++ du C du fortran95 et même du fortran77.
    Non, actuellement il est robus, presque exent de bug (long long travail de plusieur années) et surtout il est trop utilisé par la communauté (scientifiques) pour que je prennent le risque aujourd'hui de de le remanier completement ou en partie.
    Je l'ai optimisé pour enlever tous les warning de maniére à le maintenair plus facilement, il ne me reste que celui que je vous ai indiqué précedemment (des milliers).
    C'est un peu ce que je voulais dire. Quand ça marche, remplacer du code risqué par du code sûr c'est quand même prendre le risque d'une régression. C'est pour ça qu'en général, c'est assez mal vu dans les boîtes. En même temps, c'est dommage car on conserve du code bancal année après année de peur de "faire s'écrouler le château de carte".
    Citation Envoyé par uriotcea Voir le message
    J'aimerai votre aide pour le retirer le plus proprement possible.
    Goten t'a donné (presque) la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma GCC diagnostic ignored "-Wformat"

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pas de push ou pop sous gcc?
    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.

  17. #17
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Je n'en n'ai pas vu. C'est effectivement gênant.

  18. #18
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Encore heureux que GCC te donne un warning, tu invoques un comportement indéfini.

    Ce n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef _WIN32
            fscanf(f,"%d %I64i %lf ",&n,&N0,&ms);
            #else
            fscanf(f,"%d %llu %lf ",&n,&N0,&ms);
            #endif
    qu'il faut faire... Le premier cas n'est pas à utiliser sous win32, mais sous Visual C++.
    Boost ftw

  19. #19
    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
    Citation Envoyé par 3DArchi Voir le message
    C'est un peu ce que je voulais dire. Quand ça marche, remplacer du code risqué par du code sûr c'est quand même prendre le risque d'une régression. C'est pour ça qu'en général, c'est assez mal vu dans les boîtes. En même temps, c'est dommage car on conserve du code bancal année après année de peur de "faire s'écrouler le château de carte".
    Oui je suis d'accord, je mene des campagne pour réactualiser et moderniser des parties de code régulierement quand ma charge de travail me le permet, mais aujourd'hui ce n'est pas le cas, c'est la raison de ma demande.

    Goten t'a donné (presque) la solution :
    Oui mais encore, effectivement cela n'a aucun effet et j'ai beau naviguer sur le web, je ne vois pas la syntax nécessaire

  20. #20
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Oui mais encore, effectivement cela n'a aucun effet et j'ai beau naviguer sur le web, je ne vois pas la syntax nécessaire
    En mettant ignored, j'ai bien la disparition du warning.
    Cependant, loufoque a raison :
    Citation Envoyé par loufoque Voir le message
    Encore heureux que GCC te donne un warning, tu invoques un comportement indéfini.

    Ce n'est pas [...] qu'il faut faire... Le premier cas n'est pas à utiliser sous win32, mais sous Visual C++.
    Il faut que tu changes ta directive de compilation pour modifier selon GCC/Visual et non selon WIN32 ou pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef _MSC_VER
            fscanf(f,"%d %I64i %lf ",&n,&N0,&ms);
            #else
            fscanf(f,"%d %llu %lf ",&n,&N0,&ms);
            #endif

Discussions similaires

  1. Comment supprimer les doublons
    Par djelloulc dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/09/2013, 14h30
  2. Comment supprimer les doublons?
    Par Dnx dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/11/2005, 16h35
  3. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12
  4. Comment supprimer les tags RTF
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/09/2005, 14h55
  5. [String] Comment supprimer les accents
    Par iuz dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/03/2004, 02h58

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