我正在阅读Kernigan和Ritchie关于C语言的手册。
下面是一个例子:
printf("hello, world
");
这本书说明C编译器会生成一个错误信息。编译器如何检测到这个问题,为什么会出现这个问题呢?难道它不能将换行符(大概在world末尾)理解为空格吗?
在字符串字面值中,不允许有换行符。我们可以通过查看C99标准草案第6.4.5
节字符串字面值的语法来证明这一点:
string-literal:
" s-char-sequenceopt "
L" s-char-sequenceopt "
s-char-sequence:
s-char
s-char-sequence s-char
s-char:
any member of the source character set except
the double-quote ", backslash \, or new-line character
"
,\
和换行符
。\n
(即在world
中的d
右边)。它这样做是因为,正如其他评论者所说,规范要求它这样做。在参数中有"\n"。在编写printf()的参数时,永远不要按下回车键 :)
\n
来创建包含换行符的字符串。 - rici\n
的意义上添加反斜杠。 - sudowoodo