【发布时间】:2017-06-28 14:58:45
【问题描述】:
在使用宏方面我有点菜鸟,但我遇到了一个我无法解释的问题。
我使用宏来生成 BlockA 结构,如下所示:
#define TO_STRUCT(structname, type, member, size) type member size;
#define MEMBER_COUNT(structname, type, member, size) +1
#define MEMBER_NAME(structname, type, member, size) #member,
#define BLOCK_STRUCT_MEMBERS(p)\
p(BlockA, RegTypeA, regA, [5])\
p(BlockA, RegTypeB, regB, )\
struct BlockA {
BLOCK_STRUCT_MEMBERS(TO_STRUCT)
int addr;
BlockA(int address);
};
然后,我打印出了使用宏将多少成员放入结构的计数:
std::cout << BLOCK_STRUCT_MEMBERS(MEMBER_COUNT);
这会打印出正确的响应:2,如果我对在 BLOCK_STRUCT_MEMBERS 中定义时注释掉的第二个成员执行相同操作,它会打印出 1,这是有道理的。所以这似乎奏效了。但是,如果我尝试使用几乎完全相同的方法打印成员的名称,就像这样,它只会打印第一个成员的名称:
std::cout << BLOCK_STRUCT_MEMBERS(MEMBER_NAME)
它还抱怨说,当我尝试在它后面加上一个分号时它需要一个表达式,就像我打印计数时所做的那样。为什么会这样?
【问题讨论】:
-
你为什么想要首先使用宏?
-
您希望
#define MEMBER_COUNT(structname, type, member, size) +1扩展什么?你能提供一个MCVE 吗?
标签: c++ debugging struct macros