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

Langage C++ Discussion :

changment du nom de namespace


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut changment du nom de namespace
    Bonjour ,

    J'ai le code suivant:
    il y a un commentaire qui indique les changements à faire en fonction de la version de GCC dans le code ci-dessous . Que dois-je apporter comme un changement.

    Je vous remercie.
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #ifndef INDRI_ATOMIC_HPP
    #define INDRI_ATOMIC_HPP
    
    #ifndef WIN32
    #if HAVE_BITS_ATOMICITY_H
    #include <bits/atomicity.h>
    #endif
    #if HAVE_EXT_ATOMICITY_H
    #include <ext/atomicity.h>
    #endif
    #endif
    
    namespace indri {
    /*! \brief Atomic actions for thread support */
    namespace atomic {
    #ifdef WIN32
    typedef volatile LONG value_type;
    
    inline void increment( value_type& variable ) {
    ::InterlockedIncrement( &variable );
    }
    
    inline void decrement( value_type& variable ) {
    ::InterlockedDecrement( &variable );
    }
    #else
    // GCC 3.4+ declares these in the __gnu_cxx namespace, 3.3- does not.
    #if P_NEEDS_GNU_CXX_NAMESPACE
    #define __atomic_add __gnu_cxx::__atomic_add
    #endif
    typedef _Atomic_word value_type;
    
    inline void increment( value_type& variable ) {
    __atomic_add( &variable, 1 );
    }
    
    inline void decrement( value_type& variable ) {
    __atomic_add( &variable, -1 );
    }
    #endif
    }
    }
    
    #endif // INDRI_ATOMIC_HPP

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    il y a un commentaire qui indique les changements à faire en fonction de la version de GCC dans le code ci-dessous .
    Heu, non, c'est un commentaire qui justifie ce bordel dans les directives de pré-compilation.

    Que dois-je apporter comme un changement.
    Rien dans ce code.
    Il faut juste vérifier que les constantes de compilation sont correctement initialisées pour qu'elles correspondent à la situation. (Compilateur utilisé, librairies disponibles, plateforme cible, ect...)

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Le seul changement qui pourrait être justifié, c'est une simplification du code si on décide de ne plus supporter les vieilles versions de gcc, et que toute cette machinerie est devenue obsolète. Mais sinon, d'accord avec bacelar...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

    Je suis on ne peut plus d'accord avec bacelar et JolyLoic... Et j'apporte un petit argument suplémentaire

    A l'heure actuelle, même debian (qui est pourtant particulièrement "conservateur" en ce qui concerne les versions des logiciels qu'il fournit, fournit par défaut une version 5.x.y de Gcc (alors que, les versions 7.x.y sont stables et que l'une version 8.x.y est disponible pour tests!)

    Et, dans le même temps, les versions 2015 et 2017 de Visual Studio (ainsi que leur compilateur respectif) sont apparues, avec un support bien plus franc de la norme par rapport aux versions antérieures (du coté de microsoft)

    Alors, poses toi la question : est-il réellement utile de supporter des versions de compilateur qui ont entre 10 et 15 ans
    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

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses,

    J'ai eu l'erreur suivante quand j'ai exécuté mon programme précédent avec GCC V 4.4.4.3 sous Ubuntu 10.04.
    j'ai utilisé cette version ancienne de Ubuntu et GCC car le projet que je veux compiler est développé sous cette version.

    Voici l'erreur que j'ai eu lors de l’exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /usr/local/include/indri/atomic.hpp:
    In function ‘void indri::atomic::increment(indri::atomic::value_type&)’:
     
    /usr/local/include/indri/atomic.hpp:51: error: ‘__atomic_add’ was not declared in this scope
     
    /usr/local/include/indri/atomic.hpp: In function ‘void indri::atomic::decrement(indri::atomic::value_type&)’:
     
    /usr/local/include/indri/atomic.hpp:55: error: ‘__atomic_add’ was not declared in this scope
    Merci beaucoup

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Je crois que c'est l'option "-E" pour avoir le résultat de pré-processeur sous GCC, enfin, je crois.
    Corrigez les constantes de compilation pour avoir la déclaration de "__atomic_add" d'inclus.

  7. #7
    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
    Les instructions qui commencent par __ sont, classiquement, des extensions proposées par le compilateur. C'est à dire que ce sont des instructions qui peuvent être présentes pour une version donnée, et absente d'une autre.

    Cependant, je viens de vérifier le fichier ext/atomicity.h sur debian (qui utilise Gcc-6.3.0 et non la 5.x.y comme je l'ai dit plus haut), et __atomic_add est bl et bien présent dans le fichier, mais peut nécessiter le fait que le symbole __GLIBCXX_ATOMIC_BUILTINS soit défini (vérifie dans le fichier/usr/include/c++/x.y/ext/atomicity.h pour avoir confirmation en ce qui concerne ta version de gcc).

    Ceci dit, si tu as l'occasion de travailler avec une norme de C++ égale ou supérieure à C++11, tu aurais (très largement) tout intérêt à faire la transition, pour toute une série de raisons. Entre autres, le fait qu'une classe très sympa par rapport à ton problème est arrivée avec C++11: std::atomic.
    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

Discussions similaires

  1. [Article] Espaces de noms (ou namespace) en JavaScript
    Par bigboomshakala dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 19/04/2018, 18h19
  2. Designer afficher nom namespace
    Par Omsalam dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/02/2010, 08h52
  3. [XSD] [Namespaces] Format des espaces de noms
    Par inconnu652000 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 08/09/2009, 11h38
  4. namespace et meme nom d'headers
    Par sinasquax dans le forum C++
    Réponses: 4
    Dernier message: 26/06/2008, 14h13
  5. Réponses: 3
    Dernier message: 06/02/2007, 15h13

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