Est l'aide de #pragma warning push/pop de la bonne façon de modifier temporairement le niveau d'avertissement?
De temps en temps c'est difficile d'écrire du code C++ qui ne serait pas émettre des avertissements à tous. Avoir des avertissements activé est cependant une bonne idée. Donc, il est souvent nécessaire de désactiver les avertissements autour de certains aspects spécifiques de la construction et leur permet dans tous les autres morceaux de code.
J'ai vu deux manières de le faire jusqu'à présent.
La première est d'utiliser #pragma warning( push )
et #pragma warning( pop )
:
#pragma warning( push )
#pragma warning( disable: ThatWarning )
//code with ThatWarning here
#pragma warning( pop )
La seconde est d'utiliser #pragma warning( default )
:
#pragma warning( disable: ThatWarning )
//code with ThatWarning here
#pragma warning( default: ThatWarning )
Le problème que je vois dans la seconde variante est qu'elle ignore l'origine de niveau d'avertissement - l'avertissement peut avoir été éteint avant que, ou de son niveau d'avertissement peut avoir été modifié. À l'aide de default
serait jeter ces modifications.
La première approche a l'air propre. Existe-il des problèmes avec elle? Sont-il de meilleures façons d'atteindre le même?
- La portabilité, mais comme ce n'est taggés avec visual c++, ce n'est probablement pas un problème pour vous. Malheureusement, il ne semble pas la solution qui tombe n'importe où près de "ascetically plaire". Je vais toujours avec le push/pop méthode.
Vous devez vous connecter pour publier un commentaire.
La première méthode est la meilleure façon de le faire, de l'OMI. Je ne connais pas de problèmes avec elle.
Simplement garder à l'esprit qu'un #pragma est compilateur spécifique, donc ne vous attendez pas à travailler sur chaque compilateur là-bas 🙂
\\code with ThatWarning here
a un (3e partie) de la tête, et que la tête a un#pragma warning( disable: AnotherWarning)
puis le menu désactive le désactiver. Alors on peut dire que c'est une bonne chose, la bibliothèque concepteur peut être faire quelque chose dans un modèle qui génère un avertissement, qu'ils ont déterminées est sûr. Maintenant, toute utilisation de ce modèle dans votre code va générer cet avertissement, mais il sera marqué comme la bibliothèque. Il n'est pas clair du tout ce que la ligne de votre code est le déclenchement d'une alarme dans la bibliothèque.Cela va fonctionner avec plusieurs compilateurs (et les différentes versions de compilateurs).
En-tête de "pousser"
En-tête "pop"
Un avertissement
D'utilisation
en Outre comprendre des gardes pouvez vérifier qu'il n'y a pas de double push/pop/désactiver l'avertissement de pragmas.
Mise à jour
Trop tard pour acéré, mais pour tous les googlers là:
est l'abréviation de (généralement depuis VS 2008, mais dans VS 2005 pour Analyseur de Code avertissements uniquement):
suppress
est certainement le droit de réponse ici, et bien plus élégante quepush/disable/pop
oudisable/enable
.#pragma warning (suppress)
ne fonctionne que sur les ligne: de code, pas les bloc. Je soulève cette question depuis TS a déclaré "code d'avertissement".L'approche correcte (bien qu'un peu moche)
Vous pouvez désactiver les avertissements spécifiques dans le projet ou d'un fichier et options de ce paramètre s'applique comme "par défaut" par ces #pragmas à la portée pertinente. Quelques-uns des avertissements dans VS2005 sont tellement inutiles/ennuyeux que cela nettoie la sortie tout à fait un peu, si vous utilisez
/W4
.C'est dans les Propriétés de sous Propriétés de Configuration -> C/C++ -> Avancé.
Je n'ai pas de problèmes avec la première variante. Peut-être la meilleure façon est d'utiliser les éléments suivants:
Cela vous permettra de savoir qu'il y a encore des avertissements dans le code, mais les messages d'avertissement ne sera pas si ennuyeux. Mais c'est question de goût.