一、基本的用法
1、#——引數名以#作為字首則結果將被擴充套件為由實際引數的帶引號的字串。 如:12
3456
78
#define dprint(expr)printf(#expr"=%d\n",expr);
int
main()
上面的例子會列印出: a/b=2
2、##——預處理器運算子##為巨集提供了一種連線實際引數的手段。如果替換文字中的引數與##相鄰,則該引數將被實際引數替換,##與前後的空白將被刪除,並對替換後的結果重新掃瞄。 形成乙個新的標號,如果這樣產生的記號無效,或者結果依賴於##運算順序,則結果沒有定義。 如:
#definepaste(front,back)front##back
因此,巨集呼叫paste(name,_xiaobai)的結果為name_xiaobai. 如:12
3456
78910
1112
#define createfun(name1,name2)\
void
name1##name2()\
createfun(the,function);
int
main()
輸出的結果是:thefunctioncalled
二、##可以巢狀嗎? 看下面的例子:
#define cat(x,y)x##y
巨集呼叫cat(var,123)講生成var123. 但是,巨集呼叫cat(cat(1,2),3)沒有定義:##阻止了外層呼叫的引數的擴充套件。因此,它將生成下列的記號串: cat(1,2)3.
如果要再引入第二層的巨集定義,如下定義: #define xcat(x,y)cat(x,y) 那麼xcat(xcat(1,2),3)將生成123, 這是因為xcat自身的擴充套件不包含##運算子。
C語言中 和 的用法
今天在看freertos 看到如下 開機初始化 log create module template,print level info 巨集定義 define log create module module,level log control block t log control block m...
C語言中 和 的用法
使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.include includeusing namespace std define str s s define cons a,b int a e b int main 當巨集引數是另乙個巨集的時候,需要注意的是凡巨集定義裡有用 或 的地方...
c語言中 和 的用法
原文有些錯誤,修正一下。一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 include include define str s s define cons a,b int a e b int main 二 當巨集引數是另乙個巨集的時候 需要注意的是凡巨集定義裡有...