Comment faire pour déterminer la version de la norme C++ utilisé par le compilateur?
Comment déterminez-vous quelle est la version de la norme C++ est mis en œuvre par votre compilateur? Autant que je sache, ci-dessous sont les normes que j'ai connu:
- C++03
- C++98
- Vous tagged cette c++, mais deux des trois normes que vous avez énumérés ne sont pas des normes C++. Langue(s) êtes-vous intéressé?
- Désolé, je suis intéressé par les normes C++. Je ne suis pas sûr de ce que d'autres C++ versions standard sont là.
- D'accord sur le C99 et C90 - mais il y a un cas pour détecter si vous êtes sur un compilateur C++ ou C - il existe des bibliothèques utilisées sur les deux. Aussi, il y a encore du C++98 et C++03 (et peut-être certains des principaux pré-variante standard) à prendre en considération - et C++0x2010 de cours (les normes gars dire quelque chose à propos de hex ans - je suppose que c'est ce qu'ils veulent dire).
- Mon mauvais - je viens de réalisé qu'il veux sans doute dire C++0x200F - toute une année plus tôt que ce que j'ai dit avant.
- Je pense que c'est vraiment une question étrange. Comment puis-je sais que je suis en train d'écrire en anglais? (Et une liste de compilateur qui prend en charge ce standard est lié à rassir.)
- Et la question a été posée juste à quelques minutes auparavant. (stackoverflow.com/questions/7132440/...)
- La pose et fermée, parce que la question était de la foutaise et qu'il a eu d'autres arbitraire non-sens se greffer sur elle. J'ai re-posté dans un décent forme. Je serais heureux de fermer celui-ci si elle ressemble à l'original sera fixe et ressuscité, mais je ne retiens pas mon souffle.
- Eh bien, la meilleure réponse n'est pas une liste statique de compilateurs, mais un moyen de déterminer vous-même ce qui est en cours d'utilisation. Donc là vous allez.
- Geret'kal: Car FAQ représente foire aux questions, ce qui peut être souvent appelé ou une réponse, mais ce n'est certainement pas des plus fréquemment posées.
- Il le sera prochainement. Je le promets. En outre, la
c++-faq
balise n'ont pas de réelle pré-requis "nombre de fois demandé" que vous devez passer; c'est plus sur le format et la généralité de la chose. - Oh, boules. Je ne sais pas vraiment ce que la procédure est ici; j'aimerais que cette question mise à jour, mais je ne vois pas comment il pourrait susciter suffisamment d'intérêt pour que les réponses soient correctement mis à jour.
- pmr et Als réponses sont déjà présents dans cette question des réponses. Modifier la question pour ajouter C++0x (quel qu'il l'appelle maintenant), et upvote, de ceux dont le mérite qu'il va recueillir attention si les gens trouvent de l'attention digne.
- J'espérais que cette question serait d'inclure des détails sur la façon de savoir qui C++0x caractéristiques de votre compilateur prend en charge, comment faire pour activer/désactiver le C++11 mode, et telles. Mais, meh, je suppose que vous avez probablement raison...
- Il y a déjà un autre qui a sauté et elle demande en substance la même chose, je pense que tous les 3 devrait être juste regroupées sous un titre décent.
- Nah, j'abandonne. 🙂 Désolé.
- Geret'kal:
c++-faq tag doesn't have any actual pre-requisite
est incorrect et vous remarquerez que si vous lisez l'avertissement/de pied de page qui est mis à toutes les faq de répondre à la question. - détection/d'activer/désactiver les fonctionnalités de l'est, de l'OMI, une autre question (aucune idée de si/comment cela peut être fait trop). Qui pourrait être intéressant.
- J'ai fait quelques recherches. Cette question est dupe, mais la réponse est plat pas utile. (Voir ma réponse.) Ainsi, nous pouvons aller pour améliorer la vieille question et d'en faire une
faq
ou en commencer une nouvelle avec celui-ci et obtenir une réponse complète. - Et bien c'est la même chose. La détection de caractéristiques est l'équivalent de savoir ce que les [parties de] standard[s] vous êtes en utilisant. Il n'est pas coupé et sec. Si j'avais une réponse raisonnable formulé encore, je ferais le cas où il ya une vaste zone grise entre les normes de maintenant, et ça ne va qu'empirer tant que C++0x soutien s'élargit et que C++11 imprègne le homeplace.
- Je suis d'accord. J'ai déjà demandé un mod pour supprimer cette question, mais je pense que nous devrions décider entre ce que vous avez dit.
- Désolé, mais j'ai couru hors de ayant aucune idée de quoi vous parlez. [edit: OK, le
c++-faq
balise wiki couvre ce que vous dites.] - Je suppose que cela signifie que la SORTE de chat.
- Geret'kal: Vous pouvez discuter de cette croyance de la vôtre, qui n'est
no actual pre-requisite "number of times asked" that you have to pass
dans le C++ Salon, car le gens qui ont commencé la ce et le lieu où cela a été abordé décidé qu'une FAQ devrait avoir que des pré-requis. - Pour le contexte, les parties de une autre question ont juste été fusionné avec celui-ci. Malheureusement, il ne marque pas sur la fusion de la cible qu'une fusion a eu lieu.
- J'ai l'habitude de laisser un commentaire quand je l'ai fusion, et je ne suis pas tout à fait sûr pourquoi j'ai oublié de le faire cette fois. Désolé. C'est un ennuyeux partie du système, j'ai été envisagent de demander une fonctionnalité pour le rendre un peu moins subtil. Mais, je pense que c'est censé être subtil de par leur conception.
- Ce serait plus logique; la subtilité et la transparence sont très bien, mais pour une vieille question comme celle-ci, elle est juste carrément déroutant! 🙂
- Pardonnez-moi de parler de tour, mais je pense (pmr), la réponse devrait probablement être accepté.
Vous devez vous connecter pour publier un commentaire.
Par ma connaissance il n'y a aucune façon de le faire. Si vous regardez les en-têtes de croix-plate-forme/plusieurs compilateur supportant des bibliothèques, vous trouverez toujours beaucoup de définit que l'utilisation du compilateur spécifique des constructions pour déterminer, par exemple:
Vous aurez probablement à faire de telles définit-vous pour tous les compilateurs que vous utilisez.
De la Bjarne Stroustrup C++0x FAQ:
Bien que ce n'est pas aussi utile que l'on voudrait.
gcc
(apparemment depuis près de 10 ans) cette valeur est définie pour1
, en écartant l'un des principaux compilateur, jusqu'à ce que il a été fixé lors de la gcc 4.7.0 est sorti.Ce sont les normes C++ et quelle est la valeur que vous devriez être en mesure de s'attendre à
__cplusplus
:__cplusplus
est1
.__cplusplus
est199711L
.__cplusplus
est201103L
.__cplusplus
est201402L
.__cplusplus
est201703L
.Si le compilateur peut être un vieux
gcc
, nous avons besoin de recourir à compilateur spécifique hackery (regardez une version de la macro, de la comparer à une table avec des fonctionnalités implémentées) ou de l'utilisation Coup de pouce.Config (qui fournit les macros). L'avantage, c'est qu'on peut choisir les caractéristiques spécifiques de la nouvelle norme, et écrire une solution de contournement si la fonction est manquante. C'est souvent préférée à une solution de gros, comme certains compilateurs demande de mettre en œuvre C++11, mais offrent seulement un sous-ensemble des fonctionnalités.La Stdcxx Wiki accueille une matrice globale pour la prise en charge du compilateur de C++0x caractéristiques (si vous l'osez pour vérifier les fonctionnalités de vous-même).
Malheureusement, de plus en plus finement grainé vérification de caractéristiques (par exemple, la bibliothèque de fonctions comme
std::copy_if
) ne peut être fait que dans le système de compilation de votre application (exécuter du code avec la fonction, vérifier si elle a établi et a produit des résultats corrects -autoconf
est l'outil de choix si vous prenez cette route).201300
que la valeur de__cplusplus
.__cplusplus
seulement dans VS 15.7. Voir leur Visual C++ Blog de l'ÉquipeS'il vous plaît, exécutez le code suivant pour vérifier la version.
/Zc:__cplusplus
)/Zc:__cplusplus
drapeau. Je ne peux pas simplementstd::cout << /Zc:__cplusplus;
parce que les deux-points et les barres obliques ne pouvez pas faire partie des noms de variable bien sûr. Êtes-vous en mesure d'expliquer comment le faire? Merci.En fonction de ce que vous voulez atteindre, Coup de pouce.Config pourrait vous aider. Il ne fournit pas de détection de la version standard, mais il fournit des macros qui permettent de vérifier l'appui de la langue/le compilateur dispose d'.
C++0x FAQ par BS
Après un rapide sur google:
__STDC__
et__STDC_VERSION__
, voir ici__STDC__
est défini, et que sa valeur est, sont définis par l'implémentation en C++.