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)这是什么##?
答案 0 :(得分:2)
1)如果你有
#define __ something
在某个地方,那意味着什么
否则,它只是名称_KERNEL__
的一部分
2)这只会用namei(pathname)
替换每个__namei(pathname, LOOKUP_FOLLOW)
Latter是函数调用代码和参数中的某个函数。
FIBMP
替换每个__IO(0x00, 1)
,#define
其他地方
4)arg之后有三点吗?然后它是一个可变宏。 IE浏览器。
将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, )
尾随逗号是差异,它会导致编译器错误
只有在使用##
时后跟参数后才有逗号。