gcc: l'utilisation de-Werror et-pedantic est-elle considérée comme une bonne pratique?

je suis juste en train de creuser dans le manuel de gcc et certaines choses sont encore obscures pour moi:

  1. en spécifiant une std, devrais-je toujours utiliser-pedantic en conjonction?
  2. Lorsqu'on utilise -g, c'est le niveau standard suffisant ou devrais-je préciser le niveau 3, c'est-à-dire - g3?
  3. est-ce une bonne pratique d'utiliser-Werror pour promouvoir tous les avertissements aux erreurs et-pedantic-errors pour promouvoir tous les Avertissements pédantic aux erreurs?
17
demandé sur N 1.1 2010-04-04 14:58:35

4 réponses

Si vous écrivez une bibliothèque, veuillez assurez-vous qu'un programme simple comme

#include <yourlib.h>
int main() {
    return 0;
}

compile sans aucune mise en garde, même lorsque le compilateur est en mode le plus pédant avec toutes les mises en garde optionnelles activées.

si vous écrivez une application, vos avertissements de lancement de code à gauche et à droite ne sont que le problème de votre application. Avec une bibliothèque publique de fichier d'en-tête, cependant, tout le monde qui utilise plus tard cette bibliothèque sera forcé d'ignorer ou de supporter les avertissements que votre code provoque.

veuillez donc vérifier que les en-têtes de votre bibliothèque compilent sans avertissement, si possible en plusieurs modes de compilation:

$ gcc -Wall -Wextra -Werror -std=c99   -pedantic
$ gcc -Wall -Wextra -Werror -std=gnu99 -pedantic
$ gcc -Wall -Wextra -Werror -std=c89   -pedantic
$ gcc -Wall -Wextra -Werror -std=gnu89 -pedantic
21
répondu ndim 2010-04-04 13:07:13

tout cela est une question d'opinion et/ou dépend de votre base de codes et de vos pratiques de programmation. J'ai toujours compiler avec -Wall et -pedantic, je ne se soucient pas si les choses sont marquées comme des erreurs ou des avertissements, je n'ai donc jamais utiliser -Werror, et je débogue très rarement le code en utilisant le débogueur - quand je le fais,-g suffit. Quelqu'un d'autre pourrait venir avec une réponse complètement différente.

8
répondu 2010-04-04 11:27:04

tout cela est très subjectif. Voici mon avis:

  1. Votre -pedantic ne devrait pas être lié à votre utilisation de -std=foo. Utilisez -pedantic si vous voulez des messages d'erreurs pédantes; si vous utilisez -pedantic, vous voudrez aussi -Wall et -Wextra, puisque votre but est habituellement d'attraper tous les faux pas possibles, peu importe comment mineur. Notez que -pedantic ne sera pas attraper avertissements possibles, seulement les avertissements que la norme ISO C nécessite un diagnostic.

  2. j'ai toujours trouvé le niveau 2 (le niveau par défaut avec -g) pour être assez bon pour mes fins. Le niveau 3 inclut également des informations sur toutes les définitions de macro dans votre programme, mais cela n'est utile que si votre débogueur prend en charge des extensions de macro, ce qui n'est pas le cas pour le mien (GNU gdb 6.3.50-20050815 (version Apple gdb-696)). Je ne sais pas ce que le niveau 3 inclut d'autre que le niveau 2.

  3. Cela dépend. Si votre objectif est de faites le code le plus portable, le plus conforme aux normes, alors oui, je recommande fortement d'utiliser toujours -Werror et -pedantic-error (avec -Wall et -Wextra), surtout lors du démarrage de nouveaux projets. Cependant, si vous commencez avec une grosse base de codes, activer ces options vous donnera probablement des tonnes de fausses erreurs inoffensives, surtout pour des choses comme l'inadéquation signée/non signée et les conversions implicites entre différents types. Il vous faudra beaucoup de temps pour réparer une base de code pour supprimer ces erreurs, donc je ne le recommande pas.

    si vous faites un projet de sortie rapide, ne vous embêtez pas, car cela ne fera que vous ralentir.

    si vous travaillez sur une bibliothèque ou quelque chose qui va devenir open sourced, alors s'il vous plaît ne allumez ceux-ci. Vos utilisateurs apprécieront grandement le fait que votre code ne produit pas d'erreurs ou d'avertissements. Également prendre ndim conseils en compte.

6
répondu Adam Rosenfield 2017-05-23 11:44:22

j'aime utiliser-Wall-Wextra pour C++. Cependant ,si-Wextra signale des avertissements sur les en-têtes de bibliothèques que j'utilise, je les laisse habituellement tomber.

3
répondu Eddy Pronk 2010-04-04 11:05:59