将宏定义的值传递到另一个宏字符串

问题描述 投票:0回答:1

我认为从逻辑上讲这是可行的,但我认为我在这里缺少一些东西。我有一组存储为宏的命令。主命令是一个带有两个参数的字符串,它带有的参数是其他定义,范围在整数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
,但这仍然会产生相同的结果。

c macros
1个回答
0
投票

解决方案是嵌套宏:

#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"
© www.soinside.com 2019 - 2024. All rights reserved.