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

时间:2010-12-10 12:48:10

标签: c string standards-compliance

当我写错了

时,我试图找出一些东西
printf("string1""string2");

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

string1string2

这是有效的C吗?

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

4 个答案:

答案 0 :(得分:7)

是的。在解析C时,连续的字符串文字会连接在一起。

6.4.5 / 4:

  

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

答案 1 :(得分:3)

是的,在编译时连接字符串常量非常有用。

#define VERSION "1.0"
#define COMPANY "Trivial Software"

printf("hello world: v. " VERSION " copyright (c) " COMPANY);

puts(
  "blah blah blah\n"
  "blah blah blah\n"
  "blah blah blah\n"
  "blah blah blah\n"
);

答案 2 :(得分:2)

是的,它是有效的,并且很长一段时间一直是C语言的一部分(如果不是从一开始就是这样)。连接在编译时完成。

答案 3 :(得分:1)

正如其他人所说,是的,这是有效的。我只想补充一点,输入填充多行的长字符串非常有用。你不必弄乱\以表明字符串仍在继续,并且也不想添加回车符,所以你只需写下:

"very long string "
"that continues over here"

(注意每个字符串末尾的空格,这是一个常见的错误。在这种情况下,"字符串"和""将是联合的。)