An example printk
call:
printk(KERN_INFO "Log message.\n");
Perhaps this question is more about C in general, because I've never seen a function in C before that separated parameters without a comma.
How does this work? What does the compiler do with this information? Since the log level is an integer and the message is a pointer to a char array, it must pass them separately.
The printk()
function only takes one const char*
argument. The KERN_INFO
macro expands to "\001" "6"
, yielding:
printk("\001" "6" "Log message.\n");
The C lexer concatenates adjacent string literal tokens which means that the above is converted into:
printk("\0016Log message.\n");
The log level isn't an integer but a string literal. String literals next to each other are concatenated into a single string literal at compile time.
Because if you search the header files you will see that e.g. KERN_INFO
is a macro expanded as a string literal (actually multiple string literals, see e.g. the linked cross-reference), and two string literals next to each-other like that will be concatenated into a single string literal by the compiler.
So the call
printk(KERN_INFO "Log message.\n");
isn't a function call with multiple arguments, it's a function call with a single string literal argument.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With