C语言中FOREACH_OMPD_STATE类函数宏的定义运行逻辑如何理解
代码机制说明
这是C/C++中非常经典的**X宏(高阶宏)**用法,作用是统一维护重复代码结构,避免多处修改带来的不一致问题。
你提出的疑问解答如下:
- 定义里的多条
macro(状态名, 状态值)不是给宏参数传值,而是预定义好的固定参数模板 - 你需要将一个自定义的类函数宏作为参数传入
FOREACH_OMPD_STATE,预处理器会逐行把macro替换为你传入的宏名,自动展开所有行生成对应代码
实际使用示例
示例1:批量生成枚举值
// 自定义生成枚举项的模板宏 #define GENERATE_OMPT_ENUM(name, value) name = value, // 调用高阶宏批量生成枚举 enum ompt_state { FOREACH_OMPD_STATE(GENERATE_OMPT_ENUM) }; // 用完后销毁临时宏避免命名冲突 #undef GENERATE_OMPT_ENUM
预处理器展开后得到的代码如下:
enum ompt_state { ompt_state_undefined = 0x102, ompt_state_work_serial = 0x000, ompt_state_work_parallel = 0x001, ompt_state_work_reduction = 0x002, };
示例2:批量生成状态值与名称的映射表
// 自定义生成映射表项的模板宏 #define GENERATE_STATE_MAP(name, value) {value, #name}, const struct { int state_code; const char* state_name; } ompt_state_map[] = { FOREACH_OMPD_STATE(GENERATE_STATE_MAP) }; #undef GENERATE_STATE_MAP
这种写法的优势是所有OMPD状态的定义只需要在FOREACH_OMPD_STATE里维护一次,新增/修改/删除状态时,所有用到这些状态的代码会自动同步更新,不需要手动修改多处。
内容的提问来源于stack exchange,提问作者Ahmed Sayed
相关产品推荐
相关产品推荐

