我已经开始编写我的第一个内核模块并使用了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个字符串。
是否有官方文件显示这是可能的或如何运作?
答案 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";
是等价的。