c中一个接一个的字符串:“quot&引用&引用&引用;,就好像它们是连在一起的
我使用的c代码不是我自己编写的,有很多fprintf调用如下:c中一个接一个的字符串:“quot&引用&引用&引用;,就好像它们是连在一起的,c,string,concatenation,printf,C,String,Concatenation,Printf,我使用的c代码不是我自己编写的,有很多fprintf调用如下: fprintf(file, "blabla1""blabla2%s""blabla3", mystring); 我从未见过我们可以在fprintf的第二个参数中放入几个字符串,这是一种串联吗?或者这是fprintf的一个功能?如果是这样,fprintf的规范没有提到它?不,这不是fprintf()的一个特性,这是不可能的(您自己如何实现这样一个函数?),因为fprintf()只是一个标准函数,编译器没有额外的魔法 这是C语言语法的
fprintf(file, "blabla1""blabla2%s""blabla3", mystring);
我从未见过我们可以在fprintf的第二个参数中放入几个字符串,这是一种串联吗?或者这是fprintf的一个功能?如果是这样,fprintf的规范没有提到它?不,这不是
fprintf()
的一个特性,这是不可能的(您自己如何实现这样一个函数?),因为fprintf()
只是一个标准函数,编译器没有额外的魔法
这是C语言语法的一个特点:相邻的字符串文字被当作一个单独的文字处理,只需将它们连接在一起
举例来说,它和一起非常有用。我将依次回答每个问题
- 这是一种连接吗
- 或者这是fprintf的一个功能
- 如果是,fprintf的规范中没有提到它
这实际上不是一个问题,尽管有标点符号,但您可能是正确的,fprintf规范没有提到这种类型的连接,这是因为它是语言的一部分,而不是特定的函数。这是字符串文字的特征,如果它们相邻,它们将被合并。如果我们看一下
6.4.5节
String literals,第4段说:
在翻译阶段6,由任何字符序列指定的多字节字符序列
相邻字符和宽字符串文字标记连接成一个多字节
字符序列。如果任何标记是宽字符串文字标记,则结果为
多字节字符序列被视为宽字符串文字;否则,它将被视为字符串文字
正如Lundin指出的,一个更简单的引用可以在第6段翻译阶段的5.1.1.2节中找到:
相邻的字符串文字标记被连接起来
在您显示的代码中,只有一个格式代码:“%s”
。它接受mystring中包含的值,因此结果将是:“blablabla2_mystring_bla3的内容”
是的,这是法律法规。我不知道为什么会有人这样做。在C115.1.1.2/6中找到了“翻译阶段6”:相邻的字符串文字标记被连接起来。
@Lundin-Huh,这是一个更直接的引语,感谢您指出,同样的引语也存在于C99中。