给出以下代码:
#if MACRO_WITHOUT_A_VALUE
int var;
#endif
int main(){}
使用
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
^
我想使警告标志保持启用状态,但禁止显示此特定实例。
我应用以下内容:
#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]
命令。如何抑制
-Wundef
中的g++
警告? g++ (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0
clang version 3.8.0
最佳答案
在第三方 header 引发警告之前,我所做的就是将它们包装在我自己的专用 header 中,该 header 使用#pragma GCC system_header
来使该 header 中的所有警告均保持沉默。我使用自己的包装器将包含的内容保持整洁,并在将来需要时允许其他自定义点。