奇怪的#define声明,无法理解它扩展的内容

时间:2011-10-10 08:09:19

标签: c macros c-preprocessor

我在遗留代码中有#define声明,我正在 C 进行检查。

#define STEP(x)         case x: STEP ## x : WPAN_Startup_Step = x;

这是一个用于替换非常大的交换机状态机中的情况的宏。 我无法理解这个宏发生了什么。它扩展到什么?

1 个答案:

答案 0 :(得分:3)

##进行连接,这意味着结果将是这样的:

STEP(1)

case 1: STEP1: WPAN_Startup_Step = 1;

或其他例子:

STEP(v)

case v: STEPv: WPAN_Startup_Step = v;

这个宏对我来说没有多大意义,因为它会生成x: STEPx: 也许用例可以澄清这一点。

如果您想查看宏使用的扩展:gcc -E program.c

也是了解宏的好地方:http://gcc.gnu.org/onlinedocs/cpp/Macros.html