在#if块内定义GCC_447_OR_LESS宏时出现“#前缺少二元运算符”错误
解决#if内部定义宏时的编译错误问题
你遇到的问题其实不是「不能在#if内部使用#define」,而是你的代码里少了一个闭合内层#if的#endif,导致预处理逻辑混乱,才抛出了那个语法错误。
先看你原来的代码:
#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
这里的内层#if __GNUC__ ...块没有对应的#endif来闭合,预处理程序解析到#define的时候,还以为处于#if的条件判断逻辑中,自然会报错说缺少二元运算符——它根本没认出这是一个#define指令。
修正后的代码应该是这样的:
#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 // 闭合判断GCC版本的#if #endif // 闭合判断__linux__的#ifdef
简单来说,每个#if/#ifdef都必须有一个对应的#endif来匹配,嵌套的时候要注意层次关系。你原来的代码里,判断GCC版本的#if块没有闭合,导致预处理逻辑出错,补上这个#endif就可以正常编译了。
内容的提问来源于stack exchange,提问作者Olumide
相关产品推荐
相关产品推荐

