我认为从逻辑上讲这是可行的,但我认为我在这里缺少一些东西。我有一组存储为宏的命令。主命令是一个带有两个参数的字符串,它带有的参数是其他定义,范围在整数0-6之间。
宏:
#define SET_COMMAND(mode,parameter) "COMMAND=" #mode "," #paramater "\r"
#define MODE_0 1
#define MODE_1 2
#define MODE_2 3
#define MODE_3 4
#define MODE_4 5
#define MODE_5 6
#define PARAMETER_0 0
#define PARAMETER_1 1
然后在run运行时形成命令:
const char *command = AT_SET_BT_SECURITY(MODE_0, PARAMETER_0);
然后监控我的串口,打印以下内容:
COMMAND=MODE_0,PARAMETER_0
当我预料到的时候:
COMMAND=1,0
我尝试从
#
和 mode
中删除 parameter
,但这仍然会产生相同的结果。
解决方案是嵌套宏:
#define SET_COMMAND(mode,parameter) SET_COMMAND_(mode, parameter)
#define SET_COMMAND_(mode,parameter) "COMMAND=" #mode "," #parameter "\r"
或者像这样:
#define STR(...) STR_(__VA_ARGS__)
#define STR_(...) #__VA_ARGS__
#define SET_COMMAND(mode,parameter) "COMMAND=" STR(mode) "," STR(parameter) "\r"