为什么printf(“a”“b”“c”)在C中打印abc

时间:2014-07-17 12:53:13

标签: c

我在C中有以下代码:

#include<stdio.h>
void main(){
    printf("a" "b" "c");
}

输出:

abc

任何人都可以解释原因吗?

我猜测它是"a" "b" "c"预处理为"abc"。我是对的还是别的?

3 个答案:

答案 0 :(得分:8)

相邻的字符串文字作为翻译阶段6 的一部分连接在一起。

阶段简述(来源:C99标准,转述)

  1. 源文件中的Trigraphs和多字节字符映射到源字符集
  2. \结尾的行被拼接
  3. 将文件解析为一组预处理标记
  4. 处理预处理指令
  5. 将字符常量和字符串文字迁移到执行字符集
  6. 连接相邻的字符串文字。
  7. 编译的其余部分(不包括链接)
  8. 链接

答案 1 :(得分:4)

相邻的字符串文字在汇编 翻译阶段中合并.6。因为"a" "b" "c"被进一步视为"abc"字符串文字。

如果你不熟悉这个术语,第6阶段有点介于预处理和实际之间,#34;正确的&#34;汇编

答案 2 :(得分:1)

因为你正在做String literal concatenation

传递给printf的结果cstring是"abc\0"