MAN*_*624 5 c boolean linux-kernel
我开始做更多的内核编程,并在阅读中发现invbool. 但是,我似乎无法在 Internet 上找到任何关于它的内容,除了记录在案的定义之外,在几个地方几乎逐字复制:
invbool 类型反转值,使真值变为假,反之亦然。
考虑到这一点,我想不出一个可以使代码不那么混乱的实例。有什么时候使用它的好例子吗?为什么它似乎只出现在内核编程文档中?
这些invbool函数用于解析内核命令行和模块选项。这些版本解析用户可以设置为或或 的bool选项,并相应地设置一个标志。这些版本将 a 应用于结果,因此映射到并映射到。0/1N/Yoff/onboolinvbool!YfalseNtrue
据我所知,当程序员想要拥有与用户配置参数含义相反的内部标志时,它们的唯一目的是为了方便或“清晰”。例如,从用户的角度来看,也许能够设置一个标志来禁用 foo 选项更有意义(因为它应该默认启用),但从内核程序员的角度来看,有一个标志更方便,只需简单地表示 foo 是否启用。然后,您可以有一个名为 的用户设置参数disable_foo和一个名为 的内部布尔标志foo_is_enabled。您希望foo_is_enabled = false用户指定时disable_foo=Y,所以您可以invbool在此处使用。
您可以在aty128fb.c中看到类似的情况:用户可以设置nomtrr参数来禁用内存类型范围寄存器,但程序员更喜欢有一个布尔变量mtrr,即true是否启用 MTRR。
您可能认为这些是多余的,因为您可以这样做mtrr = !parameter_bool("nomtrr"),但实际上这些param_set_*函数通过引用而不是通过值返回参数值,因此您不能轻易地将 a 放入!表达式中。
我怀疑这个想法是定义这些函数使这些代码更加“自我记录”。这当然是值得商榷的。
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |