Que ce soit pour utiliser l'option -pedantic dans g ++ ou non?

16

J'apprends le C ++ et j'utilise g ++ sur Linux pour m'entraîner.

  1. Je veux savoir si les gens qui travaillent en tant que programmeurs utilisent le drapeau g ++ -pedantic et aussi son importance dans le monde réel.

  2. Qu'en est-il des autres compilateurs, permettent-ils également cela? Est-ce devenu une norme de facto?

Je suis intéressé parce que je lis C ++ Primer où l'auteur souligne qu'il est illégal d'utiliser une expression non-const comme dimension dans la définition du tableau et g ++ le permet par défaut. Et il y a peut-être d'autres choses que je ne connais pas.

user803563
la source

Réponses:

21

Oui, faites absolument ça. En fait, vous devez étudier la page de manuel et activer plus d'avertissements que -pedanticet -Wallne le feront.

Non, il n'y a pas de norme. MSVC utilise /W4par exemple.

Edward Strange
la source
7
+1, je fais d'habitude -Wall -Wextra -Werror -pedantic -std=c++0x:)
greyfade
4
@JaredBurrows: En fait, j'ai cessé d'utiliser -pedanticavec C ++ car le manuel de GCC implique qu'il n'est destiné qu'à C, et je suis passé à l'utilisation -std=c++14dans de nouveaux projets.
greyfade
1
@greyfade Ah, j'aurais dû dire, -Wall -Wextra -Werror -std=c++14:)
Jared Burrows
1
Je viens de découvrir -pedantic-errors qui donne des erreurs et non des avertissements.
Galik
6
@VillasV Well -Werrortransforme tous les avertissements en erreurs. Mais -pedantic-errorsne fait que des erreurs sur les Standard ICO C++violations.
Galik
10

Bien que je n'aie pas programmé C ++ depuis un certain temps, je vous conseille d'utiliser ce drapeau. Il vous aide à créer du code conforme aux normes et vous facilitera la vie à tous. AFAIK, la plupart des autres compilateurs ne prennent pas en charge les extensions gcc / g ++.

Je déteste par exemple, quand je ne peux pas compiler de code simplement parce que le développeur d'origine a décidé de coder contre des extensions de compilateur non standard.

Je parie qu'une énorme quantité (disons 20%) de programmes Linux qui ont été écrits en C / C ++ ne seront pas compilables avec autre chose que gcc / g ++, ce qui me rend un peu triste. Adhérez toujours aux normes.

Faucon
la source
2
La dernière fois que j'ai essayé d' utiliser d' autres compilateurs, je dirais qu'il était plus comme 20% qui serait travailler avec d' autres compilateurs, et 80% dépendaient des extensions de gcc.
Jerry Coffin
6

Personnellement j'utilise:

-Mur -Wextra -Wshadow -Weffc ++ -Wstrict-aliasing -ansi -pedantic -Werror

Active ainsi une multitude d'avertissements, mais plus important encore, traite tous les avertissements comme des erreurs (car la plupart des avertissements sont des erreurs logiques dans votre réflexion).

Martin York
la source
Souhaitez-vous ajouter quelque chose à cette liste en 2019?
Ayxan
1
@Ayxan C'est l'ensemble minimum que je recommande à tout le monde. Mais il y en a beaucoup plus qui sont utiles. Mais vous devez consulter la documentation et voir si elles vous sont utiles. Jetez un oeil-Wunreachable-code -Wno-long-long
Martin York
1
@Ayxan Lors de la création du code de profilage:-g -pg -fprofile-arcs -ftest-coverage
Martin York
1
@Ayxan When building debug-g -O0
Martin York
1
@Ayxan Lors de la construction du code de production-O3
Martin York
1

Il est tout à fait essentiel d'utiliser le -pedanticdrapeau.

J'ajouterais seulement qu'avec la norme actuelle, il est conseillé d'utiliser quelque chose de similaire à:

-std=c++17 -Wall -Wextra -Werror -Wpedantic -pedantic-errors

Où:

  • -std=c++17lui dit d'adhérer à la révision de la norme C ++, publiée en 2017, vous pouvez en savoir plus ici .

  • -Wall lui dit:

    Activez tous les avertissements sur les constructions que certains utilisateurs considèrent douteux et qui sont faciles à éviter (ou à modifier pour éviter l'avertissement), même en conjonction avec des macros, en d'autres termes un ensemble d'avertissements.

  • -Wextra lui indique d'activer quelques avertissements supplémentaires, mais pas tous.

  • -Werror lui dit de faire de tous les avertissements des erreurs.

  • -Wpedanticou lui -pedanticdit simplement :

    Émettre tous les avertissements exigés par les normes ISO C et ISO C ++ strictes; rejeter tous les programmes qui utilisent des extensions interdites et certains autres programmes qui ne suivent pas ISO C et ISO C ++.

  • -pedantic-errors lui indique de donner une erreur chaque fois que la norme de base (voir -Wpedantic) nécessite un diagnostic.


Cet ensemble est généralement utile non seulement pour les débutants, car ils apprendront progressivement que chaque avertissement a le potentiel de provoquer une erreur, mais aussi pour une utilisation normale.

Toutes les options d'avertissement sont décrites en détail ici sur la page GNU / GCC .

LinuxSecurityFreak
la source