invbool在C内核编程中的作用是什么?

invbool在C内核编程中的作用是什么?,c,linux-kernel,boolean,C,Linux Kernel,Boolean,我开始做更多的内核编程,在阅读中,我发现了invbool的存在。然而,我似乎在互联网上找不到关于它的任何东西,除了有文件记录的定义,在一些地方几乎一字不差地复制: invbool类型反转该值,使真值变为假值,反之亦然 考虑到这一点,我想不出有哪一个实例可以让代码不那么混乱。有没有一个很好的例子说明你什么时候会使用这个?为什么它似乎只出现在内核编程文档中?invbool函数用于解析内核命令行和模块选项。bool版本解析一个选项,用户可以将该选项设置为0/1或N/Y或off/on,并相应地设置boo

我开始做更多的内核编程,在阅读中,我发现了
invbool
的存在。然而,我似乎在互联网上找不到关于它的任何东西,除了有文件记录的定义,在一些地方几乎一字不差地复制:

invbool类型反转该值,使真值变为假值,反之亦然


考虑到这一点,我想不出有哪一个实例可以让代码不那么混乱。有没有一个很好的例子说明你什么时候会使用这个?为什么它似乎只出现在内核编程文档中?

invbool函数用于解析内核命令行和模块选项。
bool
版本解析一个选项,用户可以将该选项设置为
0/1
N/Y
off/on
,并相应地设置
bool
标志。
invbool
版本应用
到结果,因此
Y
映射到
false
N
映射到
true

据我所知,当程序员想要有一个与用户配置参数意义相反的内部标志时,它们的唯一目的是为了方便或“清晰”。例如,从用户的角度来看,设置一个标志来禁用foo选项可能更有意义(因为默认情况下应该启用它),但从内核程序员的角度来看,设置一个标志来简单说明是否启用foo更方便。然后,可以使用名为
disable\u foo
的用户设置参数,并启用名为
foo\u的内部布尔标志。当用户指定
disable\u foo=Y
时,您希望
foo\u是\u enabled=false
,因此您可以在此处使用
invbool

您可以在中看到类似的情况:用户可以设置
nomtrr
参数来禁用内存类型范围寄存器的使用,但是程序员更喜欢使用布尔变量
mtrr
,即
true
(如果启用了mtrr)

您可能认为这些是多余的,因为您可以只执行
mtrr=!parameter bool(“nomtrr”)
,但事实上,
param\u set*
函数通过引用而不是通过值返回参数值,因此您不能如此轻松地将一个
编码到表达式中


我怀疑这样的想法是,定义这些函数使这样的代码更“自我记录”。这当然是有争议的。

你不是唯一一个:看起来像是一些糟糕设计决策的遗留问题。Linux内核代码充斥着旧的、未记录的、似乎无用的代码。这只是一个非常简单的示例。感谢您提到参数值是通过引用而不是通过值传递的。我想知道你为什么不自己倒过来,这样就有助于揭示这种疯狂