簡體   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