ifdef _KERNEL__
1) KERNEL 的 __ 对编译器有什么意义吗?
#define namei(pathname) __namei(pathname, LOOKUP_FOLLOW)
2) 这是什么__namei?
#define FIBMP __IO(0x00, 1)
3) 这是什么 __IO?
#define pr_info(fmt, arg..) |
printfk(KERN_INFO fmt, ##arg)
4) 这是什么##?
最佳答案
1) 如果你有一个
#define __ something
在某个地方,那么它就意味着什么。
否则,它只是名称 _KERNEL__
2) 这只会用 __namei(pathname, LOOKUP_FOLLOW)
替换每个 namei(pathname)
。
后者是对代码和参数中某处函数的函数调用。
3) 相同。将每个 FIBMP
替换为 __IO(0x00, 1)
,
这是一个函数或在其他地方的#define
4) arg 后是否有三个点?然后它是一个可变参数宏。即。
将 pr_info(a)
替换为 printfk(KERN_INFO a)
将 pr_info(a, b)
替换为 printfk(KERN_INFO a, b)
将 pr_info(a, b, c)
替换为 printfk(KERN_INFO a, b, c)
等等。如果没有 ##
,它将是
将 pr_info(a)
替换为 printfk(KERN_INFO a, )
将 pr_info(a, b)
替换为 printfk(KERN_INFO a, b, )
将 pr_info(a, b, c)
替换为 printfk(KERN_INFO a, b, c, )
尾随的逗号是不同的,它会导致编译器错误。
逗号只有在使用 ##
时后跟参数时才会出现。
关于c - 一些 Linux 内核 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22017268/