使用以下代码,此代码的输出是什么,为什么?
#include <stdio.h>
int main() {
printf("Hello world\n"); // \\
printf("What's the meaning of this?");
return 0;
}
答案 0 :(得分:10)
第4行末尾的反斜杠正在转义以下新行,使它们成为一条连续的行。因为我们可以看到//开始评论,所以第5行被注释掉了。
也就是说,您的代码相当于:
#include <stdio.h>
int main() {
printf("Hello world\n"); // \printf("What's the meaning of this?");
return 0;
}
输出只是“Hello world”,带有一个新行。
编辑:正如Erik和pmg都说的那样,这在C99中是正确的,但不是C89。信用到期的信用。
它在翻译的第二阶段(ISO / IEC 9899:1999§5.1.1.2)中定义:
反斜杠字符(\)的每个实例后面紧跟一个换行符 删除字符,拼接物理源行以形成逻辑源行。
答案 1 :(得分:2)
这是“Hello world \ n”。你没试过吗?线条延续(例如三角形)有很好的记录,请查阅。语法高亮编辑器(例如带有VA X的Visual Studio)将使这一点显而易见。
请注意,这适用于C99和C ++ - 不 C89
答案 2 :(得分:1)
尾随反斜杠导致下一行被“拼接”到以反斜杠结尾的行 - 即使它是注释的一部分。这几乎总是无意的(除非它是故意的混淆技巧),并且除非下一行完全是空格或注释本身,否则会导致错误。
这是因为在翻译阶段2中发生了“行拼接”,而在阶段3中删除了评论。
较新的编译器会警告单行注释继续到下一行(我不确定可能需要什么警告级别):
GCC 4.5.1(MinGW)
C:\temp\test.c:4:34: warning: multi-line comment
MSVC 9(VS 2008)或10(VS 2010):
C:\temp\test.c(5) : warning C4010: single-line comment contains line-continuation character