linux/kconfig.h
__count_args 计算可变参数宏的参数数
1 | /* |
- 传递一个虚拟参数
dummy
和参数传入,并返回第6个参数; - 例如传入
__count_args(a, b, c)
,则展开为__arg6(dummy, a, b, c, 4, 3, 2, 1, 0)
,则返回3 dummy
是一个虚拟参数,用于确保宏展开时参数列表的长度一致。在 __count_args 宏中,dummy 被用作第一个参数,以确保即使没有传递任何参数,参数列表的长度也至少为 1。##__VA_ARGS__
是一个预处理器技巧,用于处理可变参数宏。VA_ARGS 是一个特殊的宏参数,表示传递给宏的所有可变参数。## 是预处理器的连接运算符,用于将两个标识符连接在一起。
CONFIG_VAL 拼接配置前缀与配置名
- 根据输入的配置名,返回对应的配置值。
- 配置了
USE_HOSTCC
,则返回CONFIG_TOOLS_xxx
- 配置了
CONFIG_XPL_BUILD
,则返回CONFIG_xxx
- 配置了
CONFIG_SPL_BUILD
,则返回CONFIG_SPL_xxx
- 配置了
CONFIG_TPL_BUILD
,则返回CONFIG_TPL_xxx
- 配置了
CONFIG_VPL_BUILD
,则返回CONFIG_VPL_xxx
1 | /* |
config_enabled 判断配置是否启用 返回1或0
- 如果我们有
#define CONFIG_BOOGER 1
,且传入config_enabled(BOOGER, 0)
__ARG_PLACEHOLDER_##value
展开为__ARG_PLACEHOLDER_1
,即0,
- 所以如果配置为1,传入为
(0, 1, 0)
;如果配置为0,传入为(... 1, 0)
- 则最后1返回的是第二个参数,所以如果配置为1,返回1; 如果配置为0,返回0,因为第一个参数被忽略
1 | /* |
CONFIG_IS_ENABLED 判断配置是否启用并返回TRUE或FALSE
- 传入
CONFIG_IS_ENABLED(FOO)
,则__count_args
计算为1,则展开为__CONFIG_IS_ENABLED_1(FOO)
__CONFIG_IS_ENABLED_1(FOO)
展开为__CONFIG_IS_ENABLED_3(FOO, (1), (0))
CONFIG_VAL
根据配置,是否拼接前缀,返回对应的配置值config_enabled
根据配置值,返回是否启用,即1或0__concat
拼接__unwrap
和config_enabled
返回的值,即__unwrap1
或__unwrap0
__unwrap1
或__unwrap0
展开为__unwrap 1
或__unwrap 0
__unwrap 1
或__unwrap 0
展开为1
或0
- 所以如果配置为1,返回1; 如果配置为0,返回0
1 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 wdfk-prog的个人博客!
评论