2016-08-08 20 views
2

编译考虑下面的代码忽略保持警告标志启用,但禁止这个特定的实例。
我申请了以下内容:-Wundef没有被用在G ++

#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(){} 

这只有在clang++解决问题。

命令clang++ -std=c++1z -Wundef -o main main.cpp生成没有警告。
命令g++ -std=c++1z -Wundef -o main main.cpp和以前一样使用相同的[-Wundef]警告。

如何在g++中抑制-Wundef警告?

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

你可以使用'#if defined(MACRO_WITHOUT_A_VALUE)&& MACRO_WITHOUT_A_VALUE'吗? – Ryan

+0

也许,但我正在包装我不想修改的第三方代码。 –

+0

把它换成'#ifdef'而不是呢? – Ryan

回答

2

我已经当第三方头被诱导的警告之前做的是将它们包装在使用#pragma GCC system_header只是沉默所有从头部的警告我自己的私人头。我使用我自己的包装来保持包含整齐,并允许在未来需要额外的定制点。