使用宏的扩展结果作为其他宏的参数

问题描述

我要使用一个宏,该宏采用以下格式的参数:

COMB(unique identifier,argument 1,argument 2,argument 3)

我想为其创建一个包装器,以自动生成唯一标识符。我发现this answer包含用于生成随机ID的代码,该代码已在我的代码中使用:

#define PP_CAT(a,b) PP_CAT_I(a,b)
#define PP_CAT_I(a,b) PP_CAT_II(~,a ## b)
#define PP_CAT_II(p,res) res

#define UNIQUE_NAME(base) PP_CAT(base,__COUNTER__)

#define COMB_U(key,...) COMB(UNIQUE_NAME(comb_r_),key,__VA_ARGS__)

// Using the macro
// The parameters are enums
COMB_U(KB_1,KB_2,KC_Y)

当我编译它时,我从COMB宏代码内部得到了很多错误,如下所示:

“ cmb_UNIQUE_NAME”声明为函数,返回数组

函数“ cmb_UNIQUE_NAME”的初始化类似于变量

以及带有我的代码文件内部:

此处未声明“ comb_r _”(不在函数中)

#define COMB_U(key,...)COMB(UNIQUE_NAME(comb_r_),key, VA_ARGS

还有一些似乎与错误无关的消息,例如:

注意:扩展宏“ COMB_U”

COMB_U(KB_1,KB_2,KC_Y)

我该如何解决

作为参考,COMB宏的源在这里https://github.com/germ/qmk_firmware/blob/master/keyboards/gboards/g/keymap_combo.h

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)