149 votes

Comment faire pour supprimer l'GCC mises en garde de la bibliothèque des en-têtes?

J'ai un projet qui utilise log4cxx, boost, etc. les bibliothèques dont les en-têtes de générer beaucoup de (répétitif) avertissements. Est-il un moyen de supprimer les mises en garde de la bibliothèque comprend (c #include <quelques-d'en-tête.h>) ou comprend de certains chemins d'accès? J'aimerais à -Mur et/ou -Wextra comme d'habitude sur le projet de code sans informations pertinentes soient masquées. J'utilise actuellement un grep sur faire une sortie, mais j'aimerais quelque chose de mieux.

136voto

Phi Points 356

Vous pouvez essayer d'inclure les en-têtes de la bibliothèque à l'aide de -isystem au lieu de -I. Ce sera "le système de têtes" et GCC ne les avertissements pour eux.

59voto

andrewrjones Points 492

Vous pouvez utiliser des pragmas. Par exemple:

// save diagnostic state
#pragma GCC diagnostic push 

// turn off the specific warning. Can also use "-Wall"
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"

#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/lexical_cast.hpp>

// turn the warnings back on
#pragma GCC diagnostic pop

30voto

AdSR Points 287

J'ai trouvé le truc. La bibliothèque comprend, au lieu de -Idir utilisation -isystem dir dans le makefile. GCC puis traite boost etc. en tant que système comprend et ignore les avertissements d'eux.

9voto

Hassan Syed Points 10746

#pragma sont des instructions pour le compilateur. vous pouvez mettre quelque chose avant les #include et le désactiver après.

Vous pouvez également le faire en ligne de commande.

Un autre GCC page spécialement sur la désactivation des avertissements.

Je voudrais aller pour l'option de l'utilisation de #pragma dans le code source, puis en fournissant un son motif (dans un commentaire) de pourquoi vous désactivez les mises en garde. Cela signifierait raisonnement sur les en-têtes de fichiers.

GCC approches par classer les types d'avertissement. Vous pouvez les classer à des avertissements ou pour être ignoré. Précédemment lié articles vous montrera les avertissements sont peut-être désactivée.

Remarque: vous pouvez aussi masser le code source afin de prévenir certains des avertissements à l'aide des attributs; toutefois, cette liaison vous de très près à la GCC.

Note2: GCC utilise également le pop/push interface utilisée dans microsoft compilateur -- Microsoft désactive les avertissements par le biais de cette interface. Je vous suggère d'examiner cette question plus , comme je ne sais pas si c'est encore possible.

4voto

Pablo Santa Cruz Points 73944

Vous pouvez essayer d'utiliser les en-têtes précompilés. Mises en garde ne va pas disparaître, mais au moins de ne pas s'afficher dans votre compilation.

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