gpt4 book ai didi

c - 一些 Linux 内核 C 代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:20:51 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com