令牌之前缺少二进制运算符 "#" 当 #define 在 #if 内时出错



我正在尝试定义一个宏G#define47_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 

最新更新