2010-09-03 43 views

回答

7

它允許從它們的部分構造標識符。例如:

#define CLASS_NAME(name) CLASS__ ## name 

會將CLASS_NAME(alpha)擴大爲CLASS__alpha。它被廣泛用於boost預處理器庫所使用的技巧中,例如。

#define IF0(a, b) b 
#define IF1(a, b) a 
#define IF(cond, a, b) IF ## cond(a, b) 

這將擴大到IF(0, a, b)aIF(1, a, b)b。另外,有時它用於生成結構和函數名稱(類似於C++模板)。

+0

嗨jpalecek感謝您的澄清。 – Hemanth 2010-09-09 06:13:32

+0

是不是IF(0,a,b)映射到b而IF(1,a,b)映射到了? – user13267 2016-04-20 00:23:47

0

我不確定你用「##」預處理器表示什麼。

C有一個預處理器用於在編譯時擴展宏之前的。這是源代碼的第一遍。有它用於幾個不同的事情:

  • 包括其他源/頭文件(#include
  • 有條件地編譯代碼(#ifdef等)
  • 擴展宏(#define
    • 方便常量
    • 簡單功能

但是,請注意,這不是真的「C」(雖然是規範的一部分),並且如果出錯,可能會導致頭痛。我相信新語言不會這樣做。

+0

嗨達仁jpalecek的答案是我所期待的。感謝您的高舉。 – Hemanth 2010-09-09 06:14:23