我有以下C代码:
#include<stdio.h>
void main(){
printf("a" "b" "c");
}
输出结果为:
abc
有人能解释一下为什么吗?
我猜测这是将"a" "b" "c"
预处理成"abc"
,我对吗?还是说有其他原因?
我有以下C代码:
#include<stdio.h>
void main(){
printf("a" "b" "c");
}
输出结果为:
abc
有人能解释一下为什么吗?
我猜测这是将"a" "b" "c"
预处理成"abc"
,我对吗?还是说有其他原因?
相邻的字符串字面量是在第六个翻译阶段中作为一个整体连接起来的。
阶段简述(来源:C99标准,简述)
\
结尾的行被拼接gcc -E
不执行第6阶段。 - M.Mgcc -E
,根据 printf()
的语法,我之前理解有误。现在它会给出编译错误提示。 - SMR相邻的字符串字面量在第6个翻译阶段中合并。因此"a" "b" "c"
被视为"abc"
字符串字面量。
如果您对这个术语不熟悉,第6阶段介于预处理和实际的“正式”编译之间。