printf("string1""string2")是这个有效的C?

bin*_*inW 3 c string standards-compliance

当我写错误的时候,我试图找出一些东西

printf("string1""string2");
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是它编译并生成了一个连接的字符串输出,即

string1string2
Run Code Online (Sandbox Code Playgroud)

这是有效的C吗?

我正在使用gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9)

CB *_*ley 7

是的.连续字符串文字在解析C的早期连接.

6.4.5/4:

在转换阶段6中,由任何相邻字符序列和宽字符串文字标记指定的多字节字符序列被连接成单个多字节字符序列.如果任何标记是宽字符串文字标记,则生成的多字节字符序列将被视为宽字符串文字; 否则,它被视为字符串文字.