给出以下代码:

#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 中的所有警告均保持沉默。我使用自己的包装器将包含的内容保持整洁,并在将来需要时允许其他自定义点。

09-30 14:03
查看更多