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.



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.


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.


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).


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 .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.