8
votes

Comment savoir quelle Standard ANSI C My GCC travaille par défaut?

J'ai lu ici c'est C90 avec des extensions. Comment puis-je savoir avec certitude?

c gcc

0 commentaires

5 Réponses :


5
votes

Utilisez le drapeau -std = pour spécifier une dialecte de langue: C89 , C99 , c ++ 98 , etc. Notez que C90 est équivalent à C89 .

en tant que raccourci --ansi causes -std = c89 en mode C et -std = c ++ 98 en mode C ++. < / p>

Utiliser -pedantic pour activer tous les diagnostics requis par les normes.

Les valeurs par défaut sont gnu89 pour c et gnu ++ 98 pour C ++. Consultez le manuel pour une description détaillée des différents dialectes.


8 commentaires

Lequel d'entre eux est la valeur par défaut? Y a-t-il une option dans GCC qui me dit voir la version par défaut?


@Bruce: ajouté! Notez que la valeur par défaut C ++ peut modifier finalement :-)


Qu'entendez-vous par exemple par C mode C et C ++ mode ? Récemment, j'ai lu que GCC 4.8 vise à passer au mode C ++ par défaut . Qu'est-ce que ça veut dire?


@Kerreksb: Si vous savez, répondez à ma question posée dans mon précédent commentaire. Je veux le savoir, à la volée, sans créer un sujet dessus. :RÉ


@Nawaz: C'est quelque chose de complètement différent - cela fait référence à la manière dont GCC elle-même est construite. Il y a eu une option pour la construire comme C ++ pendant une longue période, mais il a toujours été "expérimental".


@Kerreksb: Qu'est-ce que "le construit comme c ++" signifie dans ce contexte? Par "Build", je comprends la compilation, la résolution et la création de code de machine (DLL / EXE / LIB / etc.), mais "Construire comme C ++" n'a pas de sens pour moi , d'où la confusion. Voulez-vous dire "programme / code in c ++" ?


@Nawaz: Cela signifie que le compilateur lui-même sera compilé avec g ++, pas avec GCC. Je suppose que cela signifie que le code source du compilateur est traité comme C ++. Cela a-t-il du sens?


Cette réponse est maintenant obsolète. La version 5.0 modifiée par défaut sur -std = C11 . Voir Ma réponse .



7
votes

Lire le manuel. Sur mon ordinateur (OSX 10.7, GCC Version 4.2.1 (Basé sur Apple Inc. Build 5658) (Build LLVM 2335.15.00)):

-std =
Déterminer la norme linguistique. Cette option est actuellement uniquement prise en charge de
lors de la compilation C ou C ++.

Une valeur pour cette option doit être fournie; Les valeurs possibles sont

....

gnu89
Par défaut, ISO C90 Plus Extensions GNU (y compris certaines fonctionnalités C99).

....

gnu ++ 98
Les mêmes que -std = c ++ 98 plus des extensions GNU. Ceci est la valeur par défaut du code C ++.


3 commentaires

Travaille pour GCC pour moi mais pas pour Clang.


UMMM Man GCC dit qu'il n'y a pas de page d'homme pour GCC. Wat?


Je préférerais obtenir ces informations du compilateur lui-même au cas où nous travaillons avec plusieurs cuillères à outils et Manpath n'est pas définie pour le compilateur dans le chemin.



0
votes

Vous pouvez également consulter l'un des prédéfini Macros , par exemple si votre GCC demande à ANSI C ( strict__ansi ) par défaut (c'est-à-dire sans argument de CLI).


1 commentaires

Aucune version de GCC n'est parfaitement conforme à toute norme ANSI / ISO par défaut.



10
votes

Essayez ci-dessous la commande et recherchez std xxx

Il vous montrera toutes les options disponibles pour votre GCC.


2 commentaires

Mais pas quelle option est utilisée par défaut.


Sur un système de type UNIX, cela extraire uniquement les bits pertinents de GCC: GCC -V --Help 2> / dev / null | Grep 'conforme. * C standard'



0
votes

Aucune version de GCC n'est entièrement conforme à la norme ANSI ou ISO C par défaut. La valeur par défaut est toujours équivalente à -std = gnunn , en soutenant la norme donnée avec des extensions spécifiques à GNU. Avant la version 5 (et revenir de plusieurs années), la valeur par défaut était -std = gnu90 . À partir de la version 5, la valeur par défaut est -std = gnu11 .

Il y a eu trois normes ISO C: C90, C99 et C11. (C95 était un amendement mineur à C90.) La première norme ANSI C a été publiée en 1989 et est connue sous le nom de C89; Il décrit la même langue que la norme ISO C90.

Pour découvrir la version de langue par défaut pour le GCC, vous avez en cours d'exécution, tapez xxx

Rechercher la phrase "la valeur par défaut".

Ceci suppose que vous avez la documentation GCC installée, que la documentation indiquée par info gcc correspond à la version de GCC que vous utilisez et que Le libellé est suffisamment similaire que la recherche de "la valeur par défaut" trouvera les informations correctes. Aucun de ceux-ci n'est garanti. Les manuels plus anciens de la GCC peuvent être organisés différemment.

plus fiable, exécutez xxx

pour voir quelle version vous utilisez, puis visitez le Documentation en ligne GCC et lisez la documentation de la version que vous utilisez.

Plus simplement, Si vous avez une version avant 5.0, la valeur par défaut est -std = gnu89 ; Sinon, la valeur par défaut est -std = gnu11 . (Cela peut changer dans une version future, mais seulement un peu de temps après la publication d'une nouvelle norme ISO C et que les responsables de la GCC ont eu le temps de la mettre en œuvre et de décider de le faire par défaut. Ne tenez pas votre souffle.)

ou vous pouvez éviter la question en spécifiant la version que vous souhaitez utiliser l'option -std = ... option de ligne de commande.


0 commentaires