繁体   English   中英

为什么printk()函数不使用逗号分隔参数?

[英]Why doesn't the function printk() use a comma to separate parameters?

printk调用示例:

printk(KERN_INFO "Log message.\n");

也许这个问题更多地是关于C的,因为在没有逗号的情况下,在分离参数之前我从未见过C中的函数。

这是如何运作的? 编译器对这些信息做了什么? 由于日志级别是一个整数,并且消息是指向char数组的指针,因此它必须单独传递它们。

printk()函数只接受一个const char*参数。 KERN_INFO宏扩展为"\\001" "6" ,产生:

printk("\001" "6" "Log message.\n");

C lexer连接相邻的字符串文字标记,这意味着上面的内容被转换为:

printk("\0016Log message.\n");

日志级别不是整数,而是字符串文字。 彼此相邻的字符串文字在编译时连接成一个字符串文字。

因为如果你搜索头文件,你会看到例如KERN_INFO是一个扩展为字符串文字的宏(实际上是多个字符串文字,参见例如链接的交叉引用),并且两个字符串文字旁边的每个其他字符串文字将连接起来由编译器转换为单个字符串文字。

所以电话

printk(KERN_INFO "Log message.\n");

不是带有多个参数的函数调用,它是一个带有单个字符串文字参数的函数调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM