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 différencier du code c03 et c11?


Sujet :

C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par défaut Comment différencier du code c03 et c11?
    Bonjour tout le monde,

    J'ai un projet qui doit être compilable (c'est toujours mieux ) sur Visual Studio 2010 et 2012 ainsi que sur gcc (version >= 4.2).
    Le problème avec VS 2012, c'est qu'il compile par défaut en utilisant la norme c11 (ce qui rend certaines portions de mon code non compilable).

    Je voulais différencier des parties du code avec des instructions préprocesseurs pour garder la compatibilité avec les différents compilateurs.

    Je ne sais pas où trouver ces instructions (si elles existent bien sûr...).

    Avez-vous des idées?

    Merci d'avance!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    le meilleur moyen reste sans doute de compiler et voir où ça refuse.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par défaut
    Merci pour ta réponse.

    J'ai corrigé la partie qui ne compile pas avec la norme c11 (du moins celle implémentée dans VS 2012).

    C'est lorsque je fais appel à std::make_pair.

    En c03, je l'appelle de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::make_pair<MyObject*, int>(myObjectPtr, myInt)
    Et voici la version en c11:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::make_pair(myObjectPtr, myInt)
    Je voudrais les deux versions de ce code pour rester compatible avec VS 2010 (qui ne supporte pas du tout la norme c11 si je ne m'abuse).

  4. #4
    screetch
    Invité(e)
    Par défaut
    la version c11 n'est pas c11, elle marche tres bien sous c03
    si ca ne marche pas, poste le message d'erreur et on pourra corriger.
    Il se peut que la deduction de type deduise un autre type, auquel cas on peut changer par:

    std::make_pair(static_cast<MyObject*>(myObjectPtr), myInt);

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Par défaut
    Bonjour,

    Je suppose que quand tu parles de "c11", tu veux parler de C++11, et non pas de la nouvelle norme du langage C.

    À deux trois broutilles près (final, override, boucles for range), le support du C++11 de VS2012 est le même que celui de VS2010. Ça a d'ailleurs valu à Microsoft des critiques acerbes.

    Je suis étonné que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::make_pair(myObjectPtr, myInt)
    ne compile pas en C++98. La déduction des arguments template, ça n'est pas nouveau. C'est d'ailleurs tout l'intérêt de la fonction make_pair plutôt que de créer une std::pair explicitement. Peut on savoir dans quel contexte tu l'utilises ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par défaut
    Merci pour toutes ces réponses!

    Je viens également de voir que ma version c++11 est bien un code valide en c++98 par contre l'inverse n'est pas vrai (du moins sous VS 2012).

    Enfin j'ai résolu ce problème en utilisant le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::make_pair(myObjectPtr, myInt)
    Merci pour tout!

  7. #7
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Pour le support du C++11 sur VS : http://blogs.msdn.com/b/vcblog/archi.../10209291.aspx
    Et en effet, il n'y a pas grand chose de plus

    Pour make_pair, la différence entre C++11 et C++03 est l'utilisation des rvalue reference au lieu du passage par valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::pair<T1,T2> make_pair( T1 t, T2 u ); // avant C++11
    std::pair<V1,V2> make_pair( T1&& t, T2&& u ); // avec C++11
    (cf cpprefecence)
    Par contre, les 2 versions du code devrait fonctionner avec et sans C++11

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

Discussions similaires

  1. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 11/08/2005, 13h04
  2. [C#] Comment générer le code à partir du WSDL ?
    Par Piolet dans le forum Services Web
    Réponses: 2
    Dernier message: 27/08/2004, 13h30
  3. [Juridique] Comment réutiliser le code source d'une classe ?
    Par mathieu dans le forum Général Java
    Réponses: 8
    Dernier message: 17/05/2004, 13h40
  4. [VB.NET] Comment ecrire du code entre <title>
    Par ykane dans le forum ASP.NET
    Réponses: 5
    Dernier message: 10/05/2004, 16h58
  5. [debutant] comment appliquer le code d'un bouton
    Par philippejuju dans le forum MFC
    Réponses: 3
    Dernier message: 20/01/2004, 10h56

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