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/1
或 N/Y
或 off/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
参数来禁用内存类型范围寄存器,但程序员更喜欢有一个布尔变量mtrr
即 true
如果启用了 MTRR。
您可能认为这些是多余的,因为您可以只执行 mtrr = !parameter_bool("nomtrr")
,但实际上 param_set_*
函数 return 参数值是通过引用而不是值来实现的,因此您可以只是将 !
放入表达式中并不容易。
我怀疑当时的想法是定义这些函数使此类代码更加“自文档化”。这当然值得商榷。
我开始做更多的内核编程,在阅读中,发现了 invbool
的存在。但是,我似乎无法在 Internet 上找到任何关于它的信息,除了记录的定义,在几个地方几乎逐字复制:
The invbool type inverts the value, so that true values become false and vice versa.
考虑到这一点,我想不出这样可以使代码不那么混乱的实例。有什么时候使用它的好例子吗?为什么它似乎只出现在内核编程文档中?
invbool
函数用于解析内核命令行和模块选项。 bool
版本解析用户可以设置为 0/1
或 N/Y
或 off/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
参数来禁用内存类型范围寄存器,但程序员更喜欢有一个布尔变量mtrr
即 true
如果启用了 MTRR。
您可能认为这些是多余的,因为您可以只执行 mtrr = !parameter_bool("nomtrr")
,但实际上 param_set_*
函数 return 参数值是通过引用而不是值来实现的,因此您可以只是将 !
放入表达式中并不容易。
我怀疑当时的想法是定义这些函数使此类代码更加“自文档化”。这当然值得商榷。