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

SMR*_*SMR 6 c

我在C中有以下代码:

#include<stdio.h>
void main(){
    printf("a" "b" "c");
}
Run Code Online (Sandbox Code Playgroud)

它输出:

abc

有谁能解释为什么?

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

M.M*_*M.M 8

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

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

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

  • @barakmanos取决于您是否要将第6阶段称为"预处理".`gcc -E`不执行第6阶段. (3认同)
  • 因此OP在问题结尾处的猜测几乎是准确的,对吧? (2认同)