我正在阅读关于C的Kernigan和Ritchie手册。
出现以下示例:
printf("hello, world
");
该书指出C编译器将产生错误消息。编译器究竟如何检测到这一点,为什么这是一个问题?难道它只是读取换行符(可能是在世界末尾)没有空格吗?
答案 0 :(得分:6)
我们不允许在字符串文字中添加换行符,我们可以通过查看C99 draft standard部分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
我们可以看到 s-char 允许除"
,\
和new-line
之外的任何字符。
答案 1 :(得分:1)
编译器检测到错误,因为它在找到\n
之前找到d
换行符(即world
中"
之后的换行符)(即,以匹配开头"
)。
这样做是因为,正如其他评论者所说,这就是规范所要求的。
答案 2 :(得分:1)
论证中有“\ n”。在为printf()编写参数时,切勿点击输入:)