【发布时间】:2016-08-08 13:53:59
【问题描述】:
给定以下代码:
#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吗? -
也许,但我正在包装我不想修改的第 3 方代码。
-
然后把它换成
#ifdef? -
@Ryan 这就是我现在正在做的事情。我希望我可以在不知道内部宏的情况下获得某种全面的信息。比如:
#include "push_all_warnings.hpp" #include "3rd_party.hpp" #include "pop_all_warnings.hpp" -
你有
ignored和push指令向后,但这是一个已知的 GCC 问题。 gcc.gnu.org/bugzilla/show_bug.cgi?id=53431
标签: c++ g++ compiler-warnings clang++ pragma