我有一個ç以下程序:##對於C(C++)預處理器有什麼意義?
#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
當我運行只是它擴展了這個預處理器作爲
{
int var12=100;
printf("%d",var12);
}
這就是爲什麼輸出爲100
燦有人告訴我預處理器如何/爲什麼擴展var##12 to var12
?
我有一個ç以下程序:##對於C(C++)預處理器有什麼意義?
#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
當我運行只是它擴展了這個預處理器作爲
{
int var12=100;
printf("%d",var12);
}
這就是爲什麼輸出爲100
燦有人告訴我預處理器如何/爲什麼擴展var##12 to var12
?
沒有什麼太花哨:##
告訴預處理器以連接左右
看到http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation
,因爲##是C預處理器令牌連接運算符。
或者我可能不明白這個問題。
谷歌和SO搜索失敗當然,它連接的是令牌,而不是字符串。 – 2010-01-08 13:37:46
的雙數符號或「標記粘貼」操作符(##),其有時被稱爲「合併」運算符,在兩個對象狀和功能中使用的像宏。它允許單獨的令牌被加入到單個令牌中,因此不能成爲宏定義中的第一個或最後一個令牌。
如果宏定義中的形式參數在標記粘貼操作符之前或之後,則形式參數立即被未擴展的實際參數替換。在替換之前,宏觀擴展不會在參數上執行。
#define f(g,g2) g##g2
##被usued來連接在C-預處理兩個宏。 所以在編譯f(var,12)之前應該用var12替換預處理器,因此你得到了輸出。
因爲這就是'##'在C預處理器中的含義。這就像說「爲什麼'我++'增加'我'?」。因爲C標準是這樣說的! – 2010-01-08 06:19:41
-1明顯的功課。 – richo 2010-01-08 06:27:30
@Richo ....它不是家庭作業。因爲我對預處理器不太瞭解,所以我在腦海裏有這個問題。對你來說可能很容易,而且可能看起來像一個家庭作業。但對於那些' nt知道這不是很容易理解。 – Vijay 2010-01-08 06:43:33