【问题标题】:What does the '\' at the end of a #define statement mean? [duplicate]#define 语句末尾的“\”是什么意思? [复制]
【发布时间】:2014-05-25 14:25:51
【问题描述】:

我看到了这段代码:

#define REPEAT(statement) \
{ \
    while((count & ~0x7) && ((x+8) < width)) \
        UNROLL8( statement; count--; x++; ); \
    \
    while((count > 0) && (x < width)) \
    { \
        statement; \
        count--; \
        x++; \
    } \
}

这里的\ 是什么?

【问题讨论】:

  • 表示#define 扩展到多行
  • 是一个续行符。
  • 请不要回答和支持这个缺乏研究努力的重复问题。请改为将其关闭为副本。
  • @STLDeveloper 你为什么这么认为?那里的语法解释得很好...
  • @πάντα ῥεῖ - OP 不知道不是在询问如何制作多行预处理器指令。他看到了一些他不理解的东西,正在寻求帮助来识别它。这些不是一回事。

标签: c++


【解决方案1】:

宏的定义只包含一个逻辑单行。宏定义每行末尾的\ 用于允许将宏定义拆分为多个物理源代码行(可能是出于可读性原因)。

这是因为\ 后跟一个换行符在翻译的第二阶段被删除,但预处理器在第四阶段稍后运行。 [lex.phases]/2:

每个反斜杠字符 (\) 的实例后面紧跟一个换行符都会被删除,从而将物理源代码行拼接成逻辑源代码行。

【讨论】:

    【解决方案2】:

    在宏定义中,\ 表示继续

    宏的定义应该在一行,即没有任何中断。由于在您的定义中,宏定义是如此之大,以至于它不能方便地容纳在同一行而不破坏可读性。因此\ 用于向预处理器指示定义继续到下一行,以便保持程序的可读性。

    注意\ 后面必须跟一个换行符。确保\ 后面没有没有空格。

    【讨论】:

    • 这也意味着宏之外的延续,只是它通常在其他任何地方都没有关系。
    【解决方案3】:

    根据预处理器语法的要求,这些是将整个#define 事物解释为一行所必需的行继续。这样就更易读了。

    【讨论】:

      【解决方案4】:

      这意味着宏文本在你实际换行之后继续。

      #define 从连续的一行读取其内容。 \ 字符只是 'escapes'(即跳过)以下换行符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-07
        • 1970-01-01
        • 2021-12-25
        • 2015-05-29
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        • 1970-01-01
        相关资源
        最近更新 更多