为什么printf无法编译?

时间:2014-01-20 23:33:41

标签: c printf

我正在阅读关于C的Kernigan和Ritchie手册。

出现以下示例:

printf("hello, world
");

该书指出C编译器将产生错误消息。编译器究竟如何检测到这一点,为什么这是一个问题?难道它只是读取换行符(可能是在世界末尾)没有空格吗?

3 个答案:

答案 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()编写参数时,切勿点击输入:)