我指的是:Why should text files end with a newline? 其中一个答案引用了C89标准。这简单地说明一个文件必须以一个新行结束,而这一行不会立即以反斜杠开头。
这适用于最新的C ++标准吗?
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
//\
以上是否有效? (假设//后面有换行符,我无法显示)
答案 0 :(得分:7)
给定的代码在C ++的情况下是合法的,但不适用于C。
确实,C(N1570)标准说:
反斜杠字符(
\
)的每个实例后面紧跟一个换行符 删除字符,拼接物理源行以形成逻辑源行。 只有任何物理源代码行的最后反斜杠才有资格成为其中一部分 这种拼接。非空的源文件应以换行符结尾, 在任何此类之前不得立即使用反斜杠字符 拼接发生。
C ++标准(N3797)对它的描述有点不同(强调我的):
删除后跟新行字符的反斜杠字符(
\
)的每个实例, 拼接物理源线以形成逻辑源线。任何物理上只有最后一个反斜杠 源线应有资格成为此类拼接的一部分。因此,如果是一个字符序列那么 匹配生成通用字符名称的语法,行为未定义。 源文件 这不是空的,不会以换行符结尾,也不会以换行符结尾 在进行任何此类拼接之前,应立即使用反斜杠字符进行处理 好像在文件中附加了一个额外的换行符。