75 votes

Ignorer tous les avertissements dans un fichier spécifique en utilisant LLVM/Clang

Certains fichiers de mon projet iOS comportent des avertissements, et je veux les ignorer. Je ne veux pas désactiver les avertissements dans l'ensemble du projet (je sais comment faire), mais seulement dans certains fichiers spécifiques. Existe-t-il donc un moyen d'ignorer complètement tous les avertissements d'un fichier spécifique ?

J'utilise LLVM 3.0 et Clang sur Xcode 4.2.

0 votes

S'agit-il de VOS sources, ou de celles de quelqu'un d'autre dans votre projet ? Si elles appartiennent à quelqu'un d'autre, la meilleure approche pourrait être de les placer dans une bibliothèque statique et de les lier.

0 votes

La réponse donnée ici est très élégante : stackoverflow.com/questions/6921884/

96voto

kcharwood Points 1667

J'ai hérité d'un projet qui contenait beaucoup de code 320, et cette base de code m'a envoyé plusieurs avertissements et erreurs d'analyseur statique que je n'avais aucun intérêt à corriger puisque je vais retirer ce code du projet dans un avenir proche.

Vous pouvez désactiver les avertissements de l'analyseur statique pour un fichier spécifique en incluant l'indicateur de compilateur suivant :

-Xanalyzer -analyzer-disable-all-checks

Vous pouvez combiner cette option avec -w pour désactiver les avertissements pour ce fichier également. Cela m'a permis d'aller de l'avant avec de nouveaux développements sans avoir à être harcelé par la trentaine d'avertissements générés par cette base de code.

En utilisant les instructions ci-dessus : Pour utiliser Xcode pour modifier les drapeaux de construction d'un fichier :

  1. sélectionner la cible
  2. sélectionnez la phase de construction
  3. localiser le fichier pour modifier les arguments dans la phase "Compiler les sources".
  4. double-cliquez sur sa cellule "Compiler Flags" pour la modifier
  5. ajouter "-w -Xanalyzer -analyzer-disable-all-checks" pour supprimer les avertissements et les avertissements clang

0 votes

Fantastique. Merci beaucoup pour ce drapeau de compilateur, juste ce dont j'avais besoin.

4 votes

Des versions plus récentes de clang (c'est-à-dire 4.x dans iOS6) semblent avoir rendu cette option -Xclang -analyzer-disable-checker

3 votes

Le formulaire -Xanalyzer fonctionne toujours dans mon XCode nouvellement installé (version 4.5.1, IOS6). L'autre formulaire ne fonctionne pas.

70voto

justin Points 72871

Si vous n'utilisez que clang, alors vous devriez utiliser la syntaxe pragma pour les sources que vous maintenez (en supposant qu'il est impossible de supprimer l'avertissement en modifiant le programme de manière appropriée).

voici la syntaxe :

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"

char b = 'df'; // no warning.

#pragma clang diagnostic pop

s'il s'agit de programmes que vous ne pouvez pas modifier et dont vous n'assurez pas la maintenance, vous devez spécifier le ou les avertissements à désactiver pour le fichier, plutôt que tous. pour les désactiver tous, vous pouvez ajouter l'argument par fichier -w . les sources changent, et certains avertissements s'appliquent (ou non) avec des paramètres de construction différents. les messages de clang peuvent vous indiquer quel drapeau correspond à l'avertissement généré.

Pour utiliser Xcode afin de modifier les drapeaux de construction d'un fichier :

  • sélectionner la cible
  • sélectionnez la phase de construction
  • localiser le fichier pour modifier les arguments dans la phase "Compiler les sources".
  • double-cliquez sur sa cellule "Compiler Flags" pour la modifier

21voto

Robert Points 10822

Avec l'aide de la réponse de Justin, voici comment faire

1. Localisez le nom de l'alerte.

Dans mon cas, c'est conversion

enter image description here

2. Ajouter un drapeau de compilation par fichier pour les phases de construction

Utilisez le filtre pour trouver le nom du fichier dans les sources de compilation, tapez -Wno-[error name] par exemple -Wno-conversion

enter image description here

3voto

dormitkon Points 947

Vous pouvez sélectionner une cible spécifique -> Paramètres de construction, rechercher Inhiber tous les avertissements et régler sur OUI. Cela désactivera les avertissements sur cette cible. Cela peut être utile si vous utilisez du code comme JSONKit avec cocoapods, et que vous ne voulez pas voir comment le compilateur pleure à cause des avertissements :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X