在C ++标准中,如果使用//some comment\
样式(在行的末尾放置\
)注释某行,则该注释会转换为多行?
使用g ++ 4.8和VS 2012测试
//some interesting stuff\
another interesting stuff\
etc
答案 0 :(得分:94)
C ++标准,2.2 - 翻译阶段。第2阶段包括
删除后跟新行字符的反斜杠字符(
\
)的每个实例, 拼接物理源线以形成逻辑源线。
和第3阶段包括
每个评论都被一个空格字符替换
因此,在注释之前会识别该行末尾的反斜杠。
C的等效阶段2和3可以在C标准中找到(我草案中的5.1.1.2翻译阶段)。
答案 1 :(得分:12)
一个\
后跟一个新行在很早就消除了
翻译过程,在编译器开始寻找之前
评论和评论结束,见§2.2,阶段性
翻译。
答案 2 :(得分:11)
你想知道C或C ++吗? (编辑:原始问题OP要求C / C ++)
对于C以下部分 ISO / IEC 9899:TC2委员会草案 - 2005年5月6日WG14 / N1124 回答您的问题。
5.1.1.2翻译阶段
[2]反斜杠字符()的每个实例紧跟一个 删除换行符,拼接物理源行以形成 逻辑源代码行。只有任何物理来源的最后反斜杠 线路有资格成为这种拼接的一部分。源文件 不是空的,应以新行字符结尾,不得为 在任何此类之前立即加上反斜杠字符 拼接发生。
对于C ++,您可以参考Phase 2 at en.cppreference.com
1)每当反斜杠出现在一行的末尾(立即 其次是反斜杠和换行符 删除,将两个物理源行合并为一个逻辑源 线。这是一次单行操作,一行以两个结尾 反斜杠后跟一个空行不会组合三行 一个)。如果在此形成通用字符名称(\ uXXX) 阶段,行为未定义。
2)如果非空源文件 在此步骤之后不会以换行符结尾(是否没有 最初的换行符,或以反斜杠结束)行为是 undefined(直到C ++ 11)添加了终止换行符 (自C ++ 11起)
如果您的当前行是单行注释,则会将以下行作为注释连续消化。
答案 3 :(得分:7)
http://www.cplusplus.com/forum/general/33653/
您可以在代码中的任何位置添加“\”,并且将忽略换行符。
作为标准2.2段的更好参考:
反斜杠字符()的每个实例后面紧跟一个换行符 删除字符,拼接物理源行 形成逻辑源代码行。任何物理上只有最后一个反斜杠 源线应有资格成为此类拼接的一部分。如果,如 结果,一个匹配a的语法的字符序列 生成通用字符名称,行为未定义。一个 源文件非空且不以换行符结尾 字符,或以紧接在前面的换行符结尾 在进行任何此类拼接之前,应使用反斜杠字符 处理就好像附加了一个额外的换行符 文件。
关于如果最后一个角色发生了什么,目前尚不清楚 file是反斜杠。在这种情况下,大概是添加的结果 换行不应该是行拼接而是反斜杠 预处理令牌(将被诊断为无效令牌) 阶段7),但应该明确说明。
答案 4 :(得分:5)
根据Working Draft, Standard for Programming Language C++,第2章词汇惯例,2.1 - 2):
新行字符的每个实例和紧接在前的字符 反斜杠字符后面紧跟着反斜杠字符() 删除换行符,将物理源行拼接到 形成逻辑源代码行。任何物理上只有最后一个反斜杠 源线应有资格成为此类拼接的一部分。
这也适用于评论,这仍然是最终版本的一部分。
答案 5 :(得分:-6)
它在C ++标准中,就像C ++语言的一切一样。你可以免费下载C ++标准的草稿(除了参与设计C ++语言的人和编译器编写者之外几乎所有人都足够好),只需google for" C ++标准草案"。