6

C++0x 的最新草案 n3126 说:

每个反斜杠字符 (\) 的实例后面紧跟一个换行符被删除,拼接物理源代码行以形成逻辑源代码行。

...

在原始字符串文字的r-char-sequence中,在阶段 1 和 2(三元组、通用字符名称和行拼接)中执行的任何转换都将被还原。

从技术上讲,这意味着 C++ 预处理器只能识别后跟换行符的反斜杠,但我知道一些 C++ 实现也允许 Windows 或经典 Mac 风格的行结尾。

\是否需要符合 C++0x 的实现来保留原始字符串的 r-char-sequence 中紧跟反斜杠字符的换行符序列?也许一个更好的问题是:Windows C++0x 编译器是否可以使用"\\\r\n"而不是撤消每一行拼接"\\\n"

4

2 回答 2

4

翻译阶段 1 开始于

如有必要,物理源文件字符以实现定义的方式映射到基本源字符集(为行尾指示符引入换行符)。三字母序列 (2.3) 被替换 [...]

我将“在第 1 阶段和第 2 阶段(三字组、通用字符名称和线拼接)中执行的任何转换”的要求解释为明确将转换从源文件字符恢复到基本源字符集。相反,源字符稍后会转换为执行字符集,并在那里获得换行符。

于 2010-12-27T17:35:51.630 回答
0

如果您需要特定的行结束序列,您可以显式插入它,并使用字符串文字连接:

char* nitpicky = "I must have a \\r\\n line ending!\r\n"
"Otherwise, some other piece of code will misinterpret this line!";
于 2010-12-27T18:38:24.197 回答