-wundef在g ++中没有被pragma忽略

Tre*_*key 5 c++ g++ pragma compiler-warnings clang++

给出以下代码:

#if MACRO_WITHOUT_A_VALUE
int var;
#endif

int main(){}
Run Code Online (Sandbox Code Playgroud)

当编译g++ -std=c++1z -Wundef -o main main.cpp,
它产生以下警告:

main.cpp:1:5: warning: "MACRO_WITHOUT_A_VALUE" is not defined [-Wundef]
 #if MACRO_WITHOUT_A_VALUE
     ^
Run Code Online (Sandbox Code Playgroud)

我想保持警告标志启用,但禁止此特定实例.
我申请以下内容:

#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(){}
Run Code Online (Sandbox Code Playgroud)

这只能解决问题clang++.

该命令clang++ -std=c++1z -Wundef -o main main.cpp构建时没有警告.
该命令g++ -std=c++1z -Wundef -o main main.cpp使用与[-Wundef]之前相同的警告构建.

我怎样才能抑制-Wundef警告g++?

g++ (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0
clang version 3.8.0
Run Code Online (Sandbox Code Playgroud)

Mar*_*k B 5

我之前在第三方标头引发警告时所做的是将它们包装在我自己的私有标头中,该标头用于#pragma GCC system_header使来自该标头的所有警告静音。我使用自己的包装器来保持包含的整洁,并允许将来在需要时提供额外的自定义点。