C++;在多行注释中,单行注释后跟\转换 C++中的文档中有哪些特征,如果一行使用“代码>//一些注释\/COD>样式”注释(在结尾处放“代码> \/COD>”),注释被转换成多行?

C++;在多行注释中,单行注释后跟\转换 C++中的文档中有哪些特征,如果一行使用“代码>//一些注释\/COD>样式”注释(在结尾处放“代码> \/COD>”),注释被转换成多行?,c++,c,C++,C,使用g++4.8和VS 2012进行测试 //some interesting stuff\ another interesting stuff\ etc 一个\后面跟着一个新行的代码很早就被删除了 翻译过程,在编译器开始查找 评论和评论的结尾,见§2.2,阶段 翻译。 您可以在代码中的任意位置添加“\”,换行符将被忽略 作为更好的参考,本标准第2.2段: 紧跟着新行的反斜杠字符()的每个实例 删除字符,将物理源行拼接到 形成逻辑源行。只有任何物理对象上的最后一个反斜杠 电源线应有资格成为此类

使用g++4.8和VS 2012进行测试

//some interesting stuff\
another interesting stuff\
etc

一个
\
后面跟着一个新行的代码很早就被删除了 翻译过程,在编译器开始查找 评论和评论的结尾,见§2.2,阶段 翻译。

您可以在代码中的任意位置添加“\”,换行符将被忽略

作为更好的参考,本标准第2.2段:

紧跟着新行的反斜杠字符()的每个实例 删除字符,将物理源行拼接到 形成逻辑源行。只有任何物理对象上的最后一个反斜杠 电源线应有资格成为此类拼接的一部分。如 一个结果,一个与 生成通用字符名,行为未定义。A. 不为空且不以新行结尾的源文件 字符,或以紧接前面的新行字符结尾的字符 在进行任何此类拼接之前,应使用反斜杠字符 被处理为附加了一个新行字符 档案

这是不清楚的,如果最后一个字符在 文件是反斜杠。在这种情况下,可能是添加 换行符不应该是行拼接,而应该是反斜杠 预处理令牌(将在中诊断为无效令牌)
第7阶段),但这应该详细说明。

C++标准,2.2-翻译阶段。第二阶段包括

删除紧跟新行字符的反斜杠字符(
\
)的每个实例, 拼接物理源线以形成逻辑源线

第三阶段包括

每个注释都替换为一个空格字符

因此,行末尾的反斜杠会在注释之前识别

C的等效阶段2和3可以在C标准中找到(我的草案中有5.1.1.2翻译阶段)。

根据第2章词汇约定,2.1-2):

新行字符和前一个字符的每个实例 反斜杠字符紧跟其后的反斜杠字符() 删除新行字符,将物理源行拼接到 形成逻辑源行。只有任何物理对象上的最后一个反斜杠 电源线应有资格成为此类拼接的一部分


这也适用于注释,这仍然是最终版本的一部分。

< P>你想知道C还是C++?(编辑:在原始问题OP中询问C/C++)

对于C,ISO/IEC 9899:TC2委员会草案-2005年5月6日WG14/N1124的以下章节回答了您的问题

5.1.1.2翻译阶段

[2] 反斜杠字符()的每个实例后面紧跟一个 删除新行字符,拼接物理源行以形成 逻辑源行。只有任何物理源上的最后一个反斜杠 线路应符合成为此类拼接的一部分的条件。源文件 不为空的将以新行字符结尾,该新行字符不为空 在任何此类字符之前紧跟一个反斜杠字符 拼接发生

对于C++,你可以参考< /P> 1) 当反斜杠出现在行尾时(立即 后跟换行符),反斜杠和换行符都是 已删除,将两个物理源行合并为一个逻辑源 线路。这是一个单程操作,一行以两行结尾 反斜杠后跟空行不能合并三行 合并为一个)。如果在此基础上形成通用字符名(\uXXX) 阶段,行为未定义。
2)如果非空源文件未定义 此步骤后不以换行符结尾(无论是否有 换行符,或以反斜杠结束)行为是 未定义(直到C++11)添加终止换行符 (从C++11开始)


如果当前行是单行注释,后续行将被作为注释继续进行注释。

< P>它在C++标准中,就像C++语言的所有内容一样。你可以免费下载C++标准草案(几乎所有人都不需要,除了C++语言和编译器编写者的草稿,草稿就足够好了),谷歌只需“C++标准草案”。p> 您引用的引用不是很好,也不能从标准的角度真正解释正在发生的事情。附加标准段落作为更好的引用,但我可以看到其他人已经这样做了。“反斜杠预处理令牌(在第7阶段将被诊断为无效令牌)”--否,如果预处理标记作为注释的一部分出现,并且在阶段7之前删除,则预处理标记无法生成诊断。尾随的反斜杠是无害的(并且不是单独的预处理标记)。到底是谁否决了这个答案?它是最完整、最正确的(例如,比我的好)。如果不令人困惑,这怎么可能有用?@DebugErr的目的是,在一个对物理源代码行(如punchcard)长度施加硬上限的系统上,您可以机械地用新行分割每一个过长的行,而无需解析代码。我怀疑这种情况在现实生活中是否出现过,但这是最初的理由。反斜杠换行符通常用于长宏定义。请记住,
/
-注释对于C族语言来说相对较新,尤其是比预处理器更新得多。与任何发展中的事物一样,存在着必须解决的冲突,而且解决方案并不总是最优雅的。引用的页面没有回答他的问题(实际上也没有)