2011-10-10 70 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