用下面的代码,这段代码的输出是什么,为什么?这段代码的输出是什么,为什么?
#include <stdio.h>
int main() {
printf("Hello world\n"); // \\
printf("What's the meaning of this?");
return 0;
}
用下面的代码,这段代码的输出是什么,为什么?这段代码的输出是什么,为什么?
#include <stdio.h>
int main() {
printf("Hello world\n"); // \\
printf("What's the meaning of this?");
return 0;
}
在第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):
反斜线字符的每个实例(\)紧跟一个新行字符 被删除,拼接物理源代码行以形成逻辑源代码行。
这是“Hello world \ n”。你不试试吗?续行(例如trigraphs)是有据可查的,请查看它。语法高亮编辑器(例如VA X的Visual Studio)将使这一点变得明显。
注意,这部作品在C99和C++ - 不 C89
尾部反斜杠会导致下一行'拼接'到以反斜杠结尾的行 - 即使它是注释的一部分。这几乎总是无意的(除非它是故意的混淆技巧),并且会导致一个错误,除非下一行完全是空格或评论本身。
这是因为“线拼接”在转换阶段2时,同时删除注释在第3阶段
新的编译器会发出警告的单行注释被延续到下一行发生(我不知道到底是什么警戒水位可能需要虽然):
GCC 4.5.1(MinGW的)
C:\temp\test.c:4:34: warning: multi-line comment
MSVC 9(VS 2008)O ,R 10(VS 2010):
C:\temp\test.c(5) : warning C4010: single-line comment contains line-continuation character
它不与C89编译器来编译。 – pmg 2011-04-01 22:46:50