【问题标题】:Missing binary operator before token "#" error when #define is inside #if当#define 在#if 中时,在标记“#”错误之前缺少二元运算符
【发布时间】:2018-04-23 14:26:33
【问题描述】:

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

我无法解释发生了什么。 #define 不能像我使用的那样在#if 中使用吗?

【问题讨论】:

  • 删除( __GNUC_MINOR__ == 4 &amp;&amp; __GNUC_PATCHLEVEL__ &lt;= 7 ) ) 行中的最后一个“\”
  • 哇!谢谢@Raxvan

标签: c++ c-preprocessor


【解决方案1】:

character \ 告诉预处理器当前行在下一行继续。在您的情况下,最后一个 if 行 ( __GNUC_MINOR__ == 4 &amp;&amp; __GNUC_PATCHLEVEL__ &lt;= 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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2019-08-29
    • 2023-03-26
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多