printf怎么样(“你好”“世界”);工作

时间:2016-02-14 12:22:41

标签: c

我已经开始编写我的第一个内核模块并使用了KERN_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;
}

哪种方法很好,但为什么呢? 我不认为这些是2个参数,因为参数是以逗号分隔的 我知道C忽略了所有的空格,但我从来没有 听说它没有函数连接2个字符串。

是否有官方文件显示这是可能的或如何运作?

2 个答案:

答案 0 :(得分:3)

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

"abc" "def"

与:

相同
"abcdef"

记住它只适用于编译时文字,而不是char *变量,因此:

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

不会工作。

答案 1 :(得分:2)

相邻的字符串文字被视为单个文字,由连接部分组成。

因此"Hello" " there " "world"相当于"Hello there world"

顺便说一下,相邻的部分可以跨行(单个文字有点硬)。

所以

"Hello"
" there "
"world";

"Hello there world";

是等价的。