我有一个令牌列表,定义为:
#define TOKENS ACC, STOP, RUN, BACK
此列表可能会更改。我想根据这个列表创建一个函数指针数组,方法类似于:
int (*callbacks[])(const char * arg) =
{
some_macro_shenanigans(TOKENS)
};
some_macro_shenanigans(TOKENS)
应该扩展到ACC_callback, STOP_callback, ...
等等。稍后我想创建一个基于TOKENS
的字符串数组,如下所示:
const char * const token_str[] = some_other_macro_shenanigans(TOKENS);
这将扩展到类似于这样的东西:
const char * const token_str[] = [ "ACC", "STOP", "RUN", "BACK" /* and others if present */ ];
这可行吗?
当然,使用x宏(注释指向(:
#define TOKENS(DO)
DO(ACC)
DO(STOP)
DO(RUN)
DO(BACK)
#define GEN_CALLBACK(ID) ID##_callback,
#define GEN_NAME(ID) #ID,
int (*callbacks[])(const char * arg) = { TOKENS(GEN_CALLBACK) };
const char * const token_str[] = [ TOKENS(GEN_NAME) ];
对(导螺杆连杆(进行预处理
int (*callbacks[])(const char * arg) = { ACC_callback, STOP_callback, RUN_callback, BACK_callback, };
const char * const token_str[] = [ "ACC", "STOP", "RUN", "BACK", ];