如何将宏用作其他宏参数列表之一

时间:2012-10-31 08:22:16

标签: c++ visual-c++

这是一个虚拟的例子:

#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)

我如何定义宏来实现这一目标?

1 个答案:

答案 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))

记住:在调用类似函数的宏时,会识别参数,然后单独评估每个参数,然后用评估结果替换参数。