作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
clang 3.9 已向 -Wall
添加了警告 -Wexpansion-to-defined
,它会产生
macro expansion producing 'defined' has undefined behaviour
如果 defined
在 #if
表达式之外使用,包括在 #if
表达式中使用宏的情况.比如下面的代码
// in some file:
#define HAS_GNU (defined(__GNUC__) && !defined(__clang__))
// possibly in another file:
#if defined(__clang__) || HAS_GNU
/* ... */
#endif
产生
test.cc:5:27: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]
#if defined(__clang__) || HAS_GNU
^
test.cc:3:18: note: expanded from macro 'HAS_GNU'
#define HAS_GNU (defined(__GNUC__) && !defined(__clang__))
^
test.cc:5:27: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]
test.cc:3:40: note: expanded from macro 'HAS_GNU'
#define HAS_GNU (defined(__GNUC__) && !defined(__clang__))
那么“正确”的方法是什么?
最佳答案
您可以使用#if - #else 宏:
#if defined(__GNUC__) && !defined(__clang__)
#define HAS_GNU 1
#else
#define HAS_GNU 0
#endif
或者,如果您愿意更改使用 HAS_GNU
的代码,也许更传统的方式:
#if defined(__GNUC__) && !defined(__clang__)
#define HAS_GNU
#endif
#if defined(__clang__) || defined(HAS_GNU)
关于c++ - 如何处理 clang 的 (3.9) -Wexpansion-to-defined 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42074035/
clang 3.9 已向 -Wall 添加了警告 -Wexpansion-to-defined,它会产生 macro expansion producing 'defined' has undefin
我需要编译 qt-5.5 来构建各种应用程序。Qt 提供了完成此操作的指令 here ,但按照提供的步骤操作,会导致 make 错误。 注意:我尝试搜索此 make 警告的解决方案但没有成功,但是,可
我是一名优秀的程序员,十分优秀!