我正在尝试定义一个宏G
(下图(,我可以使用该宏来检查,而不是使用大丑陋的宏#define
47_OR_LESS
#ifdef __linux__
// Test for GCC 4.4.7 or less
#if __GNUC__ < 4 ||
__GNUC__ == 4 && ( __GNUC_MINOR__ < 4 ||
( __GNUC_MINOR__ == 4 && __GNUC_PATCHLEVEL__ <= 7 ) )
#define GCC_447_OR_LESS
#endif
#endif
但是我会遇到错误
error: missing binary operator before token "#"
#define GCC_447_OR_LESS
^
我无法解释发生了什么。不能以我使用的方式在#if中使用#define?
字符 告诉预处理器,下一条线将在下一条线继续。在您的情况下,最后一个如果行
( __GNUC_MINOR__ == 4 && __GNUC_PATCHLEVEL__ <= 7 ) )
将定义添加到#if条件。CC_4是true
块的一部分,不得包含在#if
行
修复的代码是:
#ifdef __linux__
// Test for GCC 4.4.7 or less
#if __GNUC__ < 4 ||
__GNUC__ == 4 && ( __GNUC_MINOR__ < 4 ||
( __GNUC_MINOR__ == 4 && __GNUC_PATCHLEVEL__ <= 7 ) ) /**/
#define GCC_447_OR_LESS
#endif
#endif