c-使用宏定义结构和str字典



我正在尝试在代码中自动生成结构,Midas库为其指定语法。这里的困难在于并行构建模仿结构定义的const char*字典:

typedef struct {
BOOL      runColdStartScript;
BOOL      runPedestalScript;
BOOL      triggerCommunicationTest;
BOOL      updateOdbParameters;
BOOL      runCmdBuffer;
BOOL      runSelectedScript;
} myHotLink;
myHotLink hotLinkContainer{};
const char *hot_links_str[9] = { 
"[.]", 
"runColdStartScript = BOOL : n", 
"runPedestalScript = BOOL : n", 
"triggerCommunicationTest = BOOL : n", 
"updateOdbParameters = BOOL : n", 
"runCmdBuffer = BOOL : n", 
"runSelectedScript = BOOL : n", 
"", nullptr 
};

理想情况下,我想用宏生成这段代码。例如:

MAKE_HOT_LINK(
myHotLink,
{ BOOL, runColdStartScript, n },
{ BOOL, runPedestalScript, n },
...
)

有人知道如何定义(并正确调用(MAKE_HOT_LINK宏吗?

干杯!

您可以使用一些元宏来定义您想要的字段,以及一些其他宏来将它们扩展到声明和描述符:

#define MYHOTLINK_FIELDS(M) 
M(BOOL, runColdStartScript, n) 
M(BOOL, runPedestalScript, n) 
M(BOOL, triggerCommunicationTest, n) 
M(BOOL, updateOdbParameters, n) 
M(BOOL, runCmdBuffer, n) 
M(BOOL, runSelectedScript, n) 
#define FIELD_DECL(TYPE, NAME, TAG)  TYPE NAME;
#define FIELD_DESCRIPTOR(TYPE, NAME, TAG)   #NAME " = " #TYPE " : " #TAG,
#define DECLARE_STRUCT(STYPE) struct { STYPE(FIELD_DECL) }
#define STRUCT_DESCRIPTOR(STYPE) { "[.]", STYPE(FIELD_DESCRIPTOR) "", nullptr }
typedef DECLARE_STRUCT(MYHOTLINK_FIELDS) myHotLink;
myHotLink hotLinkContainer {};
const char *hot_links_str[] = STRUCT_DESCRIPTOR(MYHOTLINK_FIELDS);

会扩展到(相当于(上面的内容。

最新更新