C内核编程中的invbool有什么意义?

What is the point of invbool in C kernel programming?

我开始做更多的内核编程,在阅读中,发现了 invbool 的存在。但是,我似乎无法在 Internet 上找到任何关于它的信息,除了记录的定义,在几个地方几乎逐字复制:

The invbool type inverts the value, so that true values become false and vice versa.

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

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

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

你可以在aty128fb.c中看到类似的事情发生:用户可以设置nomtrr参数来禁用内存类型范围寄存器,但程序员更喜欢有一个布尔变量mtrrtrue 如果启用了 MTRR。

您可能认为这些是多余的,因为您可以只执行 mtrr = !parameter_bool("nomtrr"),但实际上 param_set_* 函数 return 参数值是通过引用而不是值来实现的,因此您可以只是将 ! 放入表达式中并不容易。

我怀疑当时的想法是定义这些函数使此类代码更加“自文档化”。这当然值得商榷。