c++ - 当#define 在 #if 中时, token "#"错误之前缺少二元运算符

标签 c++ c-preprocessor

我正在尝试定义一个宏 GCC_447_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 吗?

最佳答案

character \ 告诉预处理器当前行在下一行继续。在您的情况下,最后一行 ( __GNUC_MINOR__ == 4 && __GNUC_PATCHLEVEL__ <= 7 ) ) \将定义添加到 #if健康)状况。 #definetrue 的一部分块,不得包含在 #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 

关于c++ - 当#define 在 #if 中时, token "#"错误之前缺少二元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49983612/

相关文章:

c++ - 在分块矩阵中查找一个值

c++ - 为什么双倍数应该是正数却为负数?

将预处理器标记转换为字符串

c++ - 使用宏迭代生成函数声明

c++ - C++ 宏可以计算 switch 语句中的案例吗?

java - 打印桌面的屏幕截图并转换为像素矩阵 [0,1]

c++ - 在继承层次中定义一次方法为virtual,使多态性发挥作用

c++ - 通过 memset 函数将 2D int 数组元素设置为 1

c++ - MSVS C++,如何编译扩展名为 *.i 的已预处理文件?

C 预处理 Token 串联