-Wundef不会被g++中的pragma忽略
-Wundef is not being ignored with pragma in g++
给定以下代码:
#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(){}
这只解决了CCD_ 2中的问题。
命令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
当第三方标头引发警告时,我以前所做的是将它们封装在我自己的私有标头中,该标头使用#pragma GCC system_header
来静音该标头中的所有警告。我使用自己的包装器来保持includes的整洁,并在未来需要时提供额外的定制点。
这不是禁用警告,而是修复预处理器代码以避免它。以下测试基于类似的问题,使用clang -Weverything
。。。
#define ZERO 0
#define ONE 1
#define EMPTY
// warning: 'NOTDEFINED' is not defined, evaluates to 0 [-Wundef]
#if NOTDEFINED
#warning NOTDEFINED
#endif
// false
#if ZERO
#warning ZERO
#endif
// true
#if ONE
#warning ONE
#endif
// error: expected value in expression
#if EMPTY
#warning EMPTY
#endif
// false
#if defined(NOTDEFINED) && NOTDEFINED
#warning NOTDEFINED
#endif
// false
#if defined(ZERO) && ZERO
#warning ZERO
#endif
// true
#if defined(ONE) && ONE
#warning ONE
#endif
// error: expected value in expression
#if defined(EMPTY) && EMPTY
#warning EMPTY
#endif
一行#if defined(SOME_MACRO) && SOME_MACRO
可以避免此警告。要明确处理该案件。。。
#if defined(DEBUG_PRINT)
#if DEBUG_PRINT
... true
#else
... false
#endif
#else
#error DEBUG_PRINT must be defined
#endif
要处理EMPTY
,请参阅以下内容:如何测试预处理器符号是否为#define';d但没有价值?
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 函数中的"pragma omp parallel for"在另一个并行循环中调用函数时无效
- 如何使用/避免 #ifdef 语句中的 #pragma
- 我可以告诉 nvcc 将 #pragma 展开应用于函数中的所有循环吗?
- Qt 创建器中的代码折叠(#pragma 区域)
- 通过C++中的#pragma将.obj文件包含到Visual Studio中的项目中
- -Wundef不会被g++中的pragma忽略
- "#pragma pack"在网络编程中的作用是什么