gpt4 book ai didi

C 预处理器 : line continuation: why exactly comment is not allowed after backslash character ('\' )?

转载 作者:行者123 更新时间:2023-12-03 23:20:22 25 4
gpt4 key购买 nike

有效代码:

#define M xxx\
yyy
无效代码:
#define M xxx\/*comment*/
yyy

#define M xxx\//comment
yyy
问题:
  • 为什么在反斜杠字符( \ )之后不允许评论?
  • 标准怎么说?

  • 更新。
    补充问题:
  • 要求(为了实现物理源行的拼接)反斜杠字符( \ )必须紧跟换行符的要求背后的动机/原因/论证是什么?在反斜杠字符( \ )之后允许注释(或空格)的障碍是什么?
  • 最佳答案

    仅当反斜杠字符是行中的最后一个字符时,才将行拼接在一起。 C 2018 5.1.1.2 指定了翻译 C 程序的阶段。在第 2 阶段:

    Each instance of a backslash character () immediately followed by a new-line character is deleted, splicing physical source lines to form logical source lines…


    如果注释跟在反斜杠字符后面,则反斜杠字符后面没有换行符,因此不进行拼接。评论在第 3 阶段处理:

    The source file is decomposed into preprocessing tokens7) and sequences of white-space characters (including comments)… Each comment is replaced by one space character…


    关于补充的问题:

    What is the motivation / reason / argumentation behind the requirement that (in order to achieve splicing of physical source lines) backslash character (\) must immediately follow by a new-line character? What is the obstacle to allow comments (or spaces) after the backslash character (\)?


    编译C程序的最早处理是最简单的。早期的 C 编译器可能已经实现为简单的过滤器层:首先将本地环境字符或文件存储方法转换为简单的字符流,然后将行拼接在一起(可能处理需要长源代码的问题)行,而必须在 80 列穿孔卡片上键入您的源代码),然后注释将被删除,依此类推。
    将行尾用反斜杠标记的行拼接在一起很容易;它只需要查看两个字符。相反,如果我们允许注释跟随标记拼接的反斜杠,它会变得复杂:
  • 反斜杠后跟注释后跟换行符将被拼接,但反斜杠后跟注释后跟其他源代码则不会。这需要查看可能有很多字符并解析注释分隔符,可能是多个注释。
  • 拼接线的目的之一是允许跨多条线连续长字符串。 (这是在 C 中连接相邻字符串之前。)所以 "abc\在一行和 def"在另一个将拼接在一起,使 "abcdef" .虽然我们可能允许在反斜杠后添加注释以连接行,但我们不想在包含 "abc\ /*" /*comment*/ 的行之后拼接。 .这意味着进行拼接的代码必须是上下文相关的;如果反斜杠出现在带引号的字符串中,则必须区别对待。
  • 关于C 预处理器 : line continuation: why exactly comment is not allowed after backslash character ('\' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63380847/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com