这是一个虚拟的例子:
#define DEFINE_STRUCTURE(Result, Structure, a, b, c) int a;
#define MEMBER_INT(name, width) Int, name, width
我在做什么时
DEFINE_STRUCTURE(Result, Structure, MEMBER_INT(b, c))
我收到了这个警告:
警告C4003:宏“DEFINE_STRUCTURE”
的实际参数不够
但我希望它能扩展到
DEFINE_STRUCTURE(Result, Structure, Int, b, c)
我如何定义宏来实现这一目标?
答案 0 :(得分:3)
您需要在替换过程中再添加一个步骤。
#define DEFINE_STRUCTURE(Result, Structure, a, b, c) int a;
#define MEMBER_INT(name, width) Int, name, width
#define DEFINE_STRUCTURE2(Result, Structure, x) DEFINE_STRUCTURE(Result, Structure, x)
DEFINE_STRUCTURE2(Result, Structure, MEMBER_INT(b, c))
记住:在调用类似函数的宏时,会识别参数,然后单独评估每个参数,然后用评估结果替换参数。