从C ++标准(追溯到至少C ++ 98)§2.2,注2种状态:
反斜线字符(\)紧跟一个新行字符的每个实例被删除时,拼接物理源极线,以形成逻辑源极线。 只有在任何物理源行的最后一个反斜杠有资格是这样一个接头的一部分。 除了在原始字符串字面量恢复接头,如果在通用字符名称的语法相匹配的字符序列拼接的结果,行为是理解过程定义网络。 源连接的文件不为空并且不在一个新行字符结束,或在由反斜杠字符任何这样的接合之前立即前面一个新行字符重圆发生,应处理,如同附加的新 - 行字符被附加到文件中。
而且,部分第2.7节中指出:
字符/ *开始一个注释,以字符* /结束。 这些注释不嵌套。 字符//开始一个注释,与下一个换行字符结束。 如果有一个换或以这样的评论的垂直制表符,只有空白字符应当它和新的行终止注释之间出现; 没有诊断是必需的。 [注:注释字符// / *和* /在//注释中没有任何特殊意义,被视为就像其他字符。 同样,注释字符//和/ *在/ *注释中没有任何特殊含义。 ]
我想借此把这两个连接在一起意味着以下几点:
// My comment \
is valid
// My comment \ still valid \
is valid
是合法的在C ++ 98。 在GCC 4.9.2,这些都编译没有任何诊断消息。 在MSVC 2013年,这些都产生了以下内容:
warning C4010: single-line comment contains line-continuation character
如果你有警告为启用错误(我做这些,),这将导致程序无法成功编译(无警告-AS-错误,它工作得很好)。 有什么在不允许单行注释延续,或者这是MSVC不符合标准的情况下的标准?