2011-10-10 68 views
0

我有这#define语句在遗留代码我正在检查C奇怪的#define声明,无法理解它扩展的内容

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

这是一个在很大的交换机状态机中替换个案的宏。 我无法理解这个宏中发生了什么。它扩展到了什么?

+0

除了步骤(x),有一个'#定义STEP'地方? – Chowlett

回答

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

+0

好吧,得到它,程序员使用“STEP ## x”来定义一个标签转到...我讨厌这种代码编程... – stdcall

+1

哦,新的。通过goto循环展开到宏生成的标签。伊克。 – Chowlett

+1

@Mellowcandle你讨厌它只是意味着你或者有潜力成为一名优秀的程序员,而不像写那个憎恶宏的人。 – Lundin