2016-08-08 1 views
2

Vu le code suivant:-Wundef n'est pas ignorée avec pragma en g ++

#if MACRO_WITHOUT_A_VALUE 
int var; 
#endif 

int main(){} 

Lors de la compilation avec, g++ -std=c++1z -Wundef -o main main.cpp,
il produit l'avertissement suivant:

main.cpp:1:5: warning: "MACRO_WITHOUT_A_VALUE" is not defined [-Wundef] 
#if MACRO_WITHOUT_A_VALUE 
    ^

Je voudrais pour conserver l'indicateur d'avertissement activé, mais supprimez cette instance particulière.
J'applique les éléments suivants:

#ifdef __GNUC__ 
#pragma GCC diagnostic ignored "-Wundef" 
#pragma GCC diagnostic push 
#endif 

#if MACRO_WITHOUT_A_VALUE 
int var; 
#endif 

#ifdef __GNUC__ 
#pragma GCC diagnostic pop 
#endif 

int main(){} 

Cela résout uniquement le problème dans clang++. La commande clang++ -std=c++1z -Wundef -o main main.cpp est créée sans avertissement.
La commande g++ -std=c++1z -Wundef -o main main.cpp utilise le même avertissement [-Wundef] que précédemment.

Comment puis-je supprimer les avertissements -Wundef dans g++?

g++ (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0 
clang version 3.8.0 
+1

Pouvez-vous utiliser '#if defined (MACRO_WITHOUT_A_VALUE) && MACRO_WITHOUT_A_VALUE'? – Ryan

+0

Peut-être, mais je suis en train d'emballer un code tiers que je préfère ne pas modifier. –

+0

Enveloppez-le dans '# ifdef' à la place alors? – Ryan

Répondre

2

Ce que je l'ai fait avant quand les en-têtes de tiers induisaient avertissements était de les envelopper dans ma propre tête privée qui utilise #pragma GCC system_header pour réduire au silence juste tous les avertissements de cet en-tête. J'utilise mon propre wrapper pour garder les inclusions propres et permettre un point de personnalisation supplémentaire dans le futur si nécessaire.