考虑以下代码:
#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
#if defined(MACRO_WITHOUT_A_VALUE) && MACRO_WITHOUT_A_VALUE
吗? - Ry-#ifdef
包裹起来吗? - Ry-#include "push_all_warnings.hpp" #include "3rd_party.hpp" #include "pop_all_warnings.hpp"
- Trevor Hickeyignored
和push
指令搞反了,但这是一个已知的 GCC 问题。https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 - Ry-