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

Boost C++ Discussion :

Boost et les ints.


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut Boost et les ints.
    Bonjour.

    en compilant un petit code simple (qui marche bien au demeurant) utilisant boost::posix_time, je me prend les warnings suivant:
    In file included from /usr/local/include/boost-1_38/boost/detail/lcast_precision.hpp:16,
    from /usr/local/include/boost-1_38/boost/lexical_cast.hpp:31,
    from /usr/local/include/boost-1_38/boost/date_time/string_parse_tree.hpp:13,
    from /usr/local/include/boost-1_38/boost/date_time/period_parser.hpp:14,
    from /usr/local/include/boost-1_38/boost/date_time/date_facet.hpp:23,
    from /usr/local/include/boost-1_38/boost/date_time/gregorian/gregorian_io.hpp:16,
    from /usr/local/include/boost-1_38/boost/date_time/gregorian/conversion.hpp:25,
    from /usr/local/include/boost-1_38/boost/date_time/posix_time/conversion.hpp:16,
    from /usr/local/include/boost-1_38/boost/thread/xtime.hpp:15,
    from /usr/local/include/boost-1_38/boost/thread/pthread/mutex.hpp:13,
    from /usr/local/include/boost-1_38/boost/thread/mutex.hpp:16,
    from /usr/local/include/boost-1_38/boost/thread/pthread/thread_data.hpp:12,
    from /usr/local/include/boost-1_38/boost/thread/thread.hpp:17,
    from /home/******/Prog/CodeBlocks/threadexchange/Thread_exchange/main.cpp:1:
    /usr/local/include/boost-1_38/boost/integer_traits.hpp:164:66: warning: use of C99 long long integer constant
    /usr/local/include/boost-1_38/boost/integer_traits.hpp:164:77: warning: use of C99 long long integer constant
    /usr/local/include/boost-1_38/boost/integer_traits.hpp:170:70: warning: use of C99 long long integer constant
    /usr/local/include/boost-1_38/boost/integer_traits.hpp:170:70: warning: use of C99 long long integer constant
    ceci étant dû à l'utilisation du constructeur de time_duration comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::posix_time::time_duration(0,0,0,boost::posix_time::time_duration::ticks_per_second()/10)
    ma question est donc: faut-il prendre en compte ces warnings et essayer d'y remédier (et dans ce cas comment) ou bien continuer à utiliser des constante simple est-il encore correct ?

    merci

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Si je comprend bien le message, il t'indique que tu utilise le type long long, qui n'est apparu que dans la version de 1999 de la norme C...

    Cela implique que tu peux te trouver confronté à des problèmes si tu viens à utiliser un compilateur qui n'est pas avec la version de la norme C de 1999 ou si, bien que ton compilateur prétende être compatible avec cette norme, il ne supporte pas effectivement l'utilisation du type long long...

    Selon moi, tu devrais tenir compte de ce message surtout dans le sens où, lorsque tu essaye de compiler ton code avec un nouveau compilateur, il est intéressant de vérifier qu'il accepte effectivement le type long long.

    Une fois que cette vérification a été effectuée, tu peux le laisser passer sans crainte

    Au passage, il me semble que, sous Gcc en tout cas, tu puisse passer l'argument std=c99 pour indiquer clairement que tu veux effectuer la compilation en respectant la version de 1999 de la norme C

    Cela devrait pouvoir supprimer l'avertissement, sans forcément diminuer outre mesure le niveau d'avertissement général (à confirmer au cours d'essais )
    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

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par méphistopheles Voir le message
    Bonjour.

    en compilant un petit code simple (qui marche bien au demeurant) utilisant boost::posix_time, je me prend les warnings suivant:
    ceci étant dû à l'utilisation du constructeur de time_duration comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::posix_time::time_duration(0,0,0,boost::posix_time::time_duration::ticks_per_second()/10)
    Je doute qu'integer_traits.hpp contienne ce code, hors les warnings sont dans ce fichier.

    ma question est donc: faut-il prendre en compte ces warnings et essayer d'y remédier (et dans ce cas comment) ou bien continuer à utiliser des constante simple est-il encore correct ?
    Tu peux jouer à modifier les entêtes de boost si tu insistes, mais ma technique à moi est de ne pas toucher aux entêtes qui me sont fournis, sauf pour fixer éventuellement un bug qui n'est pas contournable.

    Citation Envoyé par koala01 Voir le message
    Si je comprend bien le message, il t'indique que tu utilise le type long long, qui n'est apparu que dans la version de 1999 de la norme C...
    Quelques petits essais -- mais sans utiliser boost dont je ne dispose pas ici -- ne m'ont pas permis de reproduire le warning. Il faudrait le code de boost incriminé, la version de gcc et les flags utilisés à la compilation pour avoir une opinion sur la cause.

    long long est en C++ une extension commune qui sera normalisée dans la prochaine version. Et en C, c'était aussi une extension commune bien avant sa normalisation en C99.

    Cela implique que tu peux te trouver confronté à des problèmes si tu viens à utiliser un compilateur qui n'est pas avec la version de la norme C de 1999 ou si, bien que ton compilateur prétende être compatible avec cette norme, il ne supporte pas effectivement l'utilisation du type long long...
    Tu m'as l'air de confondre C et C++. Ici il est question de boost, un compilateur C99 va avoir du mal à traiter le code correctement.

    Selon moi, tu devrais tenir compte de ce message surtout dans le sens où, lorsque tu essaye de compiler ton code avec un nouveau compilateur, il est intéressant de vérifier qu'il accepte effectivement le type long long.
    Qu'est-ce que tu suggères quand le warning est dans le code de boost?

    Au passage, il me semble que, sous Gcc en tout cas, tu puisse passer l'argument std=c99 pour indiquer clairement que tu veux effectuer la compilation en respectant la version de 1999 de la norme C
    Et ne rien compiler du tout parce qu'il s'agit de C++.

  4. #4
    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
    Par défaut
    Ce warning est causé par -pedantic.
    Apparemment le seul moyen de le supprimer et de faire -std=c++0x ou -std=gnu++0x.

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    OK, il a donc -pedantic -fpermissive (ou il aurait une erreur et pas un warning). Si on demande d'être averti quand on utilise des extensions, il ne faut pas s'étonner de l'être.

  6. #6
    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
    Par défaut
    -pedantic ça ne fait que des avertissements. C'est -pedantic-errors qui fait des erreurs.

    Sinon il doit y avoir un moyen à base de __ ou de __extension__ pour que -pedantic ne dise rien.

  7. #7
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Je doute qu'integer_traits.hpp contienne ce code, hors les warnings sont dans ce fichier.
    Heu... oui, erreur de ma part, je pensait pas que Boost soit une librairie "warnée" donc je pensait que ça venait de mon code



    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Tu peux jouer à modifier les entêtes de boost si tu insistes, mais ma technique à moi est de ne pas toucher aux entêtes qui me sont fournis, sauf pour fixer éventuellement un bug qui n'est pas contournable.
    ho oui, je ferais ça dés que j'aurais 5minutes... pourquoi pas dans le bus



    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Quelques petits essais -- mais sans utiliser boost dont je ne dispose pas ici -- ne m'ont pas permis de reproduire le warning. Il faudrait le code de boost incriminé, la version de gcc et les flags utilisés à la compilation pour avoir une opinion sur la cause.
    d'après le suite, c'est apparemment les flags

    Citation Envoyé par 3DArchi Voir le message
    Salut,
    En regardant rapidement tes warnings, je me demande si cela n'a pas un rapport avec ça.
    hmmm pas vu le rapport...

    Citation Envoyé par nikko34 Voir le message
    moi ce que je vois c'est que le compilateur, à cause de -pedantic, indique que le "long long" n'est pas dans le standard C++. Ce qui est vrai.

    Par contre il le sera dans le C0x et il y a des chances qu'il soit déjà dans (tous?) les compilateurs C++.

    Une recherche sur google sur "warning: use of C99 long long integer constant boost" donne comme première réponse:

    https://svn.boost.org/trac/boost/ticket/1451
    hmmm oui, pas vu... pas beaucoup cherché non plus. (honte à moi ! )

    Par contre, C++0x ayant pas encore l'air prêt, ça risque d'être C++1x



    Citation Envoyé par loufoque Voir le message
    Ce warning est causé par -pedantic.
    Apparemment le seul moyen de le supprimer et de faire -std=c++0x ou -std=gnu++0x.
    Je l'essayerais demain et vous donnerais le résultat.



    Merci à tous

  8. #8
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par méphistopheles Voir le message
    Heu... oui, erreur de ma part, je pensait pas que Boost soit une librairie "warnée" donc je pensait que ça venait de mon code
    C'est difficile de faire une bibliothèque sans warnings pour un ensemble vaste de compilateurs et de flags de compilation. Je suppose que boost n'a pas de warnings pour un ensemble fixé de plateformes (OS+Compilateur + flags), mais quand tu sorts de ça...

  9. #9
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    he bien merci à tous, le problème est grâce à vous

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

Discussions similaires

  1. visual confond les bool et les int
    Par Biosox dans le forum Visual C++
    Réponses: 8
    Dernier message: 02/10/2007, 23h31
  2. en mode debug les int apparaissent en hexadecimal.
    Par maa dans le forum Visual Studio
    Réponses: 2
    Dernier message: 07/07/2007, 14h28
  3. pas de partie "boost" dans les tutos
    Par zais_ethael dans le forum Boost
    Réponses: 2
    Dernier message: 19/08/2006, 15h28
  4. Boost et les Threads
    Par TuRn3r dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 10/05/2006, 10h50
  5. Les INT en mode protégé
    Par le mage tophinus dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 05/12/2002, 16h13

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