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

Autres éditeurs Discussion :

[gcc][bug?] warning: will never be executed


Sujet :

Autres éditeurs

  1. #1
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut [gcc][bug?] warning: will never be executed
    Voilà, j'ai une classe très simple :

    Object.hh

    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
    20
    21
    22
    23
     
    #ifndef _OBJECT_HH_
    #define _OBJECT_HH_
     
    #include <string>
     
    namespace Core
    {
      class Object
      {
      public:
        Object( std::string & );
     
        std::string GetName();
        void SetName( std::string & );
     
      private:
     
        std::string m_name;
      };
    }
     
    #endif
    Object.cc :

    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
    20
    21
     
    #include "Object.hh"
     
    namespace Core
    {
      Object::Object( std::string & n )
        : m_name(n)
      {
     
      }
     
      std::string Object::GetName( void )
      {
        return m_name;
      }
     
      void Object::SetName( std::string & n )
      {
        m_name = n;
      }
    }
    J'ai la ligne de compilation suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++ -O2 -Wuninitialized -W -Wall -pedantic -Werror -g -Wchar-subscripts -Wcomment -Wformat=2 -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wpointer-arith -Wwrite-strings -Wconversion -Wsign-compare -Waggregate-return -Wmissing-noreturn -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Winline -Wlong-long -Wunreachable-code -c Object.cc
    Et j'ai les warning suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    cc1plus: warnings being treated as errors
    Object.cc: In constructor ‘Core::Object::Object(std::string&)’:
    Object.cc:9: warning: will never be executed
    Object.cc: In constructor ‘Core::Object::Object(std::string&)’:
    Object.cc:9: warning: will never be executed
    Sachant que la neuvième ligne est l'accolade fermante du constructeur, j'ai du mal à comprendre pourquoi j'ai un warning ici.

    PS : il s'agit de gcc 4.1.2 sur une debian unstable.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Ce n'est pas parce que ton constructeur a la forme du constructeur par recopie (indiqué par le passage par référence) ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Non, ça ne règle pas le problème, en essayant sans les références, ça ne change rien ...

    Est ce qu'il y aurait quelque chose qu'on ne m'aurait pas dit avec l'utilisation de std::string ?

    La classe Object n'existerait pas déjà sous gcc ?

    Sous mac avec gcc 4.0.1 ça donne exactement la même chose.

  4. #4
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Avec g++ 3.3 ça me donne ceci :

    In file included from Object.cc:359:
    /usr/include/gcc/darwin/3.3/c++/bits/basic_string.h: In member function `_Alloc
    std::basic_string<_CharT, _Traits, _Alloc>::get_allocator() const [with
    _CharT = char, _Traits = std::char_traits<char>, _Alloc =
    std::allocator<char>]':
    /usr/include/gcc/darwin/3.3/c++/bits/basic_string.h:209: instantiated from `void std::basic_string<_CharT, _Traits, _Alloc>::_Rep::_M_dispose(const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'
    Object.cc:359: instantiated from `std::basic_string<_CharT, _Traits, _Alloc>::~basic_string() [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'
    Object.cc:359: instantiated from `std::basic_string<_CharT, _Traits, _Alloc>::~basic_string() [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'
    Object.cc:7: instantiated from here
    /usr/include/gcc/darwin/3.3/c++/bits/basic_string.h:912: warning: function
    returns an aggregate
    Object.cc: In member function `std::string Core::Object::GetName()':
    Object.cc:12: warning: function returns an aggregate
    Object.cc:14: warning: function returns an aggregate
    make: *** [all] Error 1

  5. #5
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Moi quand j'utilise un namespace dans un .h je fais toujours ainsi :

    using namespace std;

    donc ca donnerai :

    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
    20
    21
    22
     
    #ifndef _OBJECT_HH_
    #define _OBJECT_HH_
     
    #include <string>
     
    using namespace Core;
     
      class Object
      {
      public:
        Object( std::string & );
     
        std::string GetName();
        void SetName( std::string & );
     
      private:
     
        std::string m_name;
      };
     
    #endif
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  6. #6
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    J'ai peur de ne pas avoir compris ce que tu fais ...

    Ma classe object doit être déclarée dans l'espace de nom Core.

    J'utilise habituellement ce qui est ici (j'ai déjà effectué plusieurs classes selon le même principe):

    http://cpp.developpez.com/cours/cpp/

  7. #7
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    A la boulette.....

    J'ai cru que tu UTILISAIS un namaspace par qu tu voulais le DEFINIR....
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Il doit y avoir plusieurs façons de faire car pour ma part le using namespace Core; je le mets plutot dans le fichier de définition de la class.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  9. #9
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    J'ai cru que tu UTILISAIS un namaspace par qu tu voulais le DEFINIR....
    J'en était sur !

  10. #10
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Bon ben ca resoud pas le probleme...ca en est ou ?

    tu compile comment ?
    c koi la ligne de commande, un makefile peut etre ?
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  11. #11
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Toujours rien

  12. #12
    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
    Citation Envoyé par SnakemaN
    Moi quand j'utilise un namespace dans un .h je fais toujours ainsi :
    using namespace std;


    JAMAIS de using namespace en liberté dans un .h!
    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.

  13. #13
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par Médinoc

    JAMAIS de using namespace en liberté dans un .h!
    aiyeuuhhh
    mais pourquoi ?
    il est pas en liberté il entre le #ifndef et le #endif
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  14. #14
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Parce qu'à chaque fois que tu vas inclure ce .h le using sera actif et donc il n'y aura plus aucun interêt à l'utilisation des espaces de noms.

  15. #15
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Malgré les conditions de définition ifndef et endif ??

    Mais alors comment faire ?
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  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
    J'ai déjà vu mettre des using namespace dans un namespace nommé {}, mais je ne sais pas si c'est limité à ce bloc ou à tout le namespace (donc, tous les blocs définissant un namespace de ce nom)...

    Sinon, tu peux toujours mettre un using namespace dans un corps de fonction inline, mais sinon, il vaut mieux toujours mettre le préfixe.
    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
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Bon, j'ai du nouveau.

    Si j'utilise des char * à la place des std::string, ça passe sans problème.

    Le problème viendrait donc de l'utilisation des std::string dans les constructeurs.

    Mais donc dans ce cas pourquoi cette erreur ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/02/2011, 10h40
  2. Warning « Will never be executed »
    Par lucas-84 dans le forum SDL
    Réponses: 1
    Dernier message: 17/02/2011, 01h05
  3. bug dans un déploiement d'executable.
    Par deubelte dans le forum Visual C++
    Réponses: 5
    Dernier message: 12/01/2009, 14h49
  4. gcc, disable warnings ?
    Par pada51 dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 28/06/2007, 09h53
  5. Bug du Pc lors d'execution d'un programme
    Par amine2684 dans le forum Windows XP
    Réponses: 19
    Dernier message: 02/09/2005, 21h27

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