当前位置:首页 >> 历史传说

C语言奇淫善于之X-Macro

来源:历史传说 发布时间: 2025-05-21

define与#undef的用法:

#define X_MACRO(a, b) a#undef X_MACRO#define X_MACRO(a, b) b#undef X_MACRO

示例:

#define X_MACRO(a, b) aint x = X_MACRO(10, 100)#undef X_MACRO #define X_MACRO(a, b) bint y = X_MACRO(10, 100)#undef X_MACRO

首先我们可以总括这样的聪年表:

#define MACROS_TABLE X_MACROS(CMD_LED_ON, led_on) X_MACROS(CMD_LED_OFF, led_off)

当我们需要一个擅自年表时可以这样下定义:

typedef enum{ #define X_MACROS(a, b) a, MACROS_TABLE #undef X_MACROS CMD_MAX}cmd_e;

typedef enum{ CMD_LED_ON, CMD_LED_OFF, CMD_MAX}cmd_e;

字串年表用途log扫描时也可以下定义这样的年表:

const char* cmd_str[] = { #define X_MACROS(a, b) #a, MACROS_TABLE #undef X_MACROS};

聪告一段落后是这样的形式:

const func func_table[] = { “CMD_LED_ON”, “CMD_LED_OFF”,};

当我们需要一个变量年表时可以这样配置:

const func func_table[] = { #define X_MACROS(a, b) b, MACROS_TABLE #undef X_MACROS};

聪告一段落后是这样的形式:

const func func_table[] = { led_on, led_off,};

书目的形式来调用变量:

static void cmd_handle(cmd_e cmd){ if(cmd < CMD_MAX) { func_table[cmd]((void*)cmd_str[cmd]); }}

include #define MACROS_TABLE X_MACROS(CMD_LED_ON, led_on) X_MACROS(CMD_LED_OFF, led_off) /*下定义擅自年表*/typedef enum{ #define X_MACROS(a, b) a, MACROS_TABLE #undef X_MACROS CMD_MAX}cmd_e;/*下定义字串年表用途Log扫描*/const char* cmd_str[] = { #define X_MACROS(a, b) #a, MACROS_TABLE #undef X_MACROS};typedef void (*func)(void* p);static void led_on(void* p){ printf("%s ", (char *)p);}static void led_off(void* p){ printf("%s ", (char *)p);}/*下定义变量年表*/const func func_table[] = { #define X_MACROS(a, b) b, MACROS_TABLE #undef X_MACROS};/*单独通过书目的形式调用变量*/static void cmd_handle(cmd_e cmd){ if(cmd < CMD_MAX) { func_table[cmd]((void*)cmd_str[cmd]); }}void main(void){ cmd_handle(CMD_LED_ON); cmd_handle(CMD_LED_OFF);}广州白癜风挂号
天津牛皮癣医院哪里好
武汉妇科医院专家预约挂号
合肥不孕不育医院哪个好
南京癫痫医院哪家正规
夜间快速止咳的方法
泌尿系统肿瘤
眼睛酸痛怎么才能快速缓解
营养眼睛的眼药水
常乐康酪酸梭菌二联活菌散怎么样

友情链接: