invbool在C内核编程中的意义何在?



我开始做更多的内核编程,在阅读中,发现了invbool的存在。但是,我似乎在互联网上找不到有关它的任何内容,除了记录在案的定义,在几个地方几乎逐字复制:

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

考虑到这一点,我想不出这会减少代码混乱的情况。有没有一个很好的例子,你什么时候会使用它?为什么它似乎只出现在内核编程文档中?

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

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

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

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

我怀疑这个想法是定义这些函数会使这样的代码更加"自我记录"。 这当然是值得商榷的。

最新更新