C printf(Hello“World”是如何使用的;工作

C printf(Hello“World”是如何使用的;工作,c,C,我已经开始编写我的第一个内核模块,并使用了KERN\u INFO宏。 线路本身看起来是这样的 printk(KERN_INFO "Hello world"); 所以我很困惑,为什么在KERN_INFO之后没有逗号,并使用预处理器打印扩展版本 printk("\001" "6" "Hello world 2\n"); 现在我更糊涂了。我用printf编写了一个小程序来测试这一点 #include <stdio.h> int main (void) { printf

我已经开始编写我的第一个内核模块,并使用了
KERN\u INFO
宏。
线路本身看起来是这样的

printk(KERN_INFO "Hello world");
所以我很困惑,为什么在
KERN_INFO
之后没有逗号,并使用预处理器打印扩展版本

printk("\001" "6" "Hello world 2\n");
现在我更糊涂了。我用
printf
编写了一个小程序来测试这一点

#include <stdio.h>

int main (void)
{
        printf("Hello" "World");
        return 0;
}
#包括
内部主(空)
{
printf(“你好”,“世界”);
返回0;
}
这很好,但为什么呢?
我不认为这是两个参数,因为参数是逗号分隔的。
我知道C忽略了所有的空格,但我从来没有
听说过它在没有函数的情况下连接两个字符串


是否有官方文档表明这是可能的或它是如何工作的?

C连接相邻的字符串文本。对于C语言:

"abc" "def"
同:

"abcdef"
重要的是要记住,它只适用于编译时文本,而不适用于
char*
变量,因此:

char s[10] = "abc";
printf(s "def");

不起作用。

相邻字符串文字被视为单个文字,通过连接部分组成

所以
“Hello”“there”“world”
相当于
“Hello there world”

顺便说一句,相邻部分可以跨行断开(这对于单个文字来说有点困难)

所以


是等效的。

答案在副本中引用了标准。@Jongware感谢您链接到一个链接到官方文档的答案。
"Hello"
" there "
"world";
"Hello there world";