当#define位于#if内时,在令牌“#”错误之前缺少二元运算符

时间:2018-04-23 14:26:33

标签: 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吗?

1 个答案:

答案 0 :(得分:3)

character \告诉预处理器当前行在下一行继续。在您的情况下,最后一行if ( __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