2012-10-09 55 views
0

可能重複:
C preprocessor and concatenation
C preprocessor # and ## operators「##」在C中做什麼?

雖然通過我與開發(在嵌入式項目)操作系統的一些C代碼搜索我發現下面的定義語句:

#define concatn(s1, s2) s1 ## s2 

我從來沒有見過「##」運算符經過一番嚴重的谷歌搜索之後,我找不到任何相關內容。這裏發生了什麼?

我已經通過操作系統源搜索,找不到任何引用字符串「##」被定義爲一些其他形式的C運算符。這是標準的C,還是可能/可能是編譯器的一個特性?

+3

串連在預處理器 –

+0

[ 「##操作員C」 - >手氣不錯](HTTP ://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/topic/com.ibm.etools.iseries.langref.doc/ilcrefer17.htm)你不會使用「我很幸運」按鈕很多,但它在這裏工作正常。 – mawburn

+0

嗯,我不知道我的Google上下文有什麼問題,但Google在搜索時往往會忽略特殊字符。我嘗試過的每個搜索都返回到泛型的C運算符列表 - 其中沒有一個包含「##」運算符。實際上,我打開了許多頁面並在頁面內搜索 - 在哪裏找不到它。 – RLH

回答

4

這是預處理,令牌的級聯的一部分,concatn(x,y)xy取代。

3

這是標準的C預處理器串並置運算符

2

它是用來連接兩個標記(在這種情況下S1和S2)。更多詳情here。這是標準的C預處理,因此每個符合標準的編譯器都應該處理它。

例如:

concatn(a_, b) = 1; 

威爾宏:

a_b = 1; 
4

##是C.它的標記粘貼操作者被用來連接兩個令牌。

實施例:

#define PASTE(front, back) front ## back 

然後

PASTE(name, 1)  

創建令牌name1