给定以下代码:
#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]
警告构建。
如何在 g++
中抑制 -Wundef
警告?
g++ (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0
clang version 3.8.0
最佳答案
当第三方 header 引发警告时,我之前所做的是将它们包装在我自己的私有(private) header 中,该 header 使用 #pragma GCC system_header
来消除来自该 header 的所有警告。我使用自己的包装器来保持包含的整洁,并允许在未来需要时提供额外的自定义点。
关于c++ - -Wundef 不会被 g++ 中的 pragma 忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38831058/