如何将某些内容附加到逗号分隔的列表(实现为宏)中,并使用C预处理器将其转换为字符串



我有一个令牌列表,定义为:

#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", ];

相关内容

  • 没有找到相关文章

最新更新