C ++单行注释,然后在多行注释中转换
在C ++标准中,如果某行使用//some comment\
style(在行结尾放置\
)注释,那么注释会转换为多行?
用g ++ 4.8和VS 2012testing
//some interesting stuff\ another interesting stuff\ etc
C ++标准,2.2 – 翻译阶段。 第二阶段包括
每个反斜线字符(
\
)紧接着一个换行符的实例都被删除,拼接物理源代码行以形成逻辑源代码行。
和第三阶段包括
每个评论被replace为一个空格字符
所以在行结尾的反斜杠在注释之前被识别。
C的等效阶段2和3可以在C标准中find(5.1.1.2草稿中的翻译阶段)。
在编译器开始查找注释和注释结束之前,在翻译过程中很早就消除了一个新的行,参见第2.2节“翻译阶段”。
你想知道C或C ++吗? ( 编辑:在原来的问题OP要求C / C + +)
对于ISO / IEC 9899中的 C部分:TC2委员会草案 – 2005年5月6日WG14 / N1124回答您的问题。
5.1.1.2翻译阶段
[2]每个反斜线字符()紧接着一个新行字符的实例都被删除,拼接物理源代码行以形成逻辑源代码行。 只有任何物理源线上的最后一个反斜杠才有资格作为这种拼接的一部分。 非空的源文件应以换行符结束,在任何这样的拼接发生之前不应该立即以反斜线字符作为前缀。
对于C ++,您可以参考en.cppreference.com上的第2阶段
1)每行尾部出现反斜杠(紧接着换行符后面),删除反斜杠和换行符,将两条物理源代码行组合成一条逻辑源代码行。 这是一个单步操作,以两条反斜杠结尾的一条空行跟一条空行不会将三行组合成一行)。 如果在此阶段形成通用字符名称(\ uXXX),则行为未定义。
2)如果一个非空的源文件在这一步之后没有以一个换行符结尾(不pipe它最初没有换行符,还是以一个反斜杠结束),行为是不确定的(直到C ++ 11)一个终止换行符是添加(自C ++ 11以来)
如果您的当前行是单行注释,则下面的行将作为注释继续消化。
http://www.cplusplus.com/forum/general/33653/
您可以在代码中的任何位置添加“\”,换行符将被忽略。
作为更好的参考标准的2.2段:
每个反斜线字符()紧接着一个换行符的实例都被删除,拼接物理源代码行以形成逻辑源代码行。 只有任何物理源线上的最后一个反斜杠才有资格作为这种拼接的一部分。 因此,如果产生与通用字符名称的语法匹配的字符序列,则行为是不确定的。 如果源文件不是空的,并且不是以换行符结束,或者以任何这种拼接发生之前立即以反斜线字符开始的换行符结束,行字符被附加到文件。
如果文件中的最后一个字符是反斜杠,会发生什么呢? 在这种情况下,大概是添加换行符的结果不应该是行拼接,而应该是一个反斜杠预处理标记(在第7阶段将被诊断为无效标记),但是这应该被拼写出来。
根据工作草案,编程语言C ++标准 ,第2章词汇约定,2.1 – 2):
每个新行字符的实例和紧接的前一个反斜杠字符都是一个反斜杠字符(),后面紧跟着一个换行符,并将物理源代码行拼接起来形成逻辑源代码行。 只有任何物理源线上的最后一个反斜杠才有资格作为这种拼接的一部分。
这也适用于评论,这仍然是最终版本的一部分。
它在C ++标准中,就像关于C ++语言的一切。 你可以免费下载C ++标准草案(除了C ++语言devise人员和编译器编写人员之外,几乎所有人都可以使用这个草稿),只是谷歌的“C ++标准草案”。