2009-10-03 6 views
3

Existe-t-il un #pragma pour que gcc/Xcode supprime des avertissements spécifiques, similaires à l'annotation @SuppressWarning de Java? En règle générale, je compile avec -Wall, mais il y a certaines situations où je voudrais juste ignorer un avertissement spécifique (par exemple en écrivant un code rapide/sale juste pour aider à déboguer quelque chose). Je ne suis pas à la recherche de réponses «corrigez le code».Existe-t-il un pragma gcc/Xcode pour supprimer les avertissements?

Répondre

3

Here's a viable solution. Utilisez #pragma GCC system_header pour laisser GCC gérer votre code d'une manière très spéciale, supprimant ainsi toute #warning non fatale. Rappelez-vous que vous êtes juste en train de tromper votre préprocesseur, pas le vrai compilateur. La suppression des avertissements pourrait être nuisible la plupart du temps.

+1

Dans un monde idéal, nous devrions même traiter tous les avertissements comme des erreurs (en utilisant -Werror). C'est ce que je fais quand je peux. Cela devient difficile quand on a affaire à plusieurs plateformes, mais à part ça, warning = error. –

+0

Oui, je fais aussi -Werror. Ma question était plus pour le code temporaire pour faciliter le débogage. – nall

+1

Dommage que vous ne pouvez pas faire cela dans un bloc. Le faire pour le reste du fichier est trop dangereux pour moi. –

2

En gcc4.6 et plus tard, vous pouvez utiliser Pragma pour supprimer des avertissements spécifiques et faire que la suppression uniquement à un bloc de code spécifique, à savoir:

#pragma GCC diagnostic 
push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 
// Code that causes warning goes here 
#pragma GCC diagnostic pop 

Le push/pop utilisés pour conserver les options de diagnostic qui étaient en place avant que votre code a été traité.

Cela serait une bien meilleure approche que d'utiliser "#pragma GCC system_header" pour supprimer tous les avertissements. (Bien sûr, dans gcc plus vous pouvez être « coincé » avec l'approche #pragma GCC system_header!)

Voici une belle référence sur la suppression des avertissements gcc: http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html

Cette page décrit également comment utiliser -fdiagnostics-show-option pour savoir ce L'option contrôle un avertissement particulier.

Bien sûr, comme d'autres le mentionnent, il est généralement préférable de réparer la cause de tous les avertissements plutôt que de les supprimer! Cependant, parfois ce n'est pas possible.

Questions connexes