巨集是c語言中乙個很重要的特性,預處理器會在預處理中對巨集進行替換。但是巨集的語法又有許多的坑,所以這篇部落格來記錄一下,參考書目《c primer plus》在c語言中
#
可以告訴預處理器,這是它需要處理的地方。預處理器會對**中巨集出現的地方用替換體進行替換,有時候可以用巨集來提高**執行速度(和內聯函式有點像)。
巨集的語法:
#define 巨集 替換體
巨集不可以有空格,但是替換體可以,有的預處理器會將替換體解釋為字元型字串,這時候替換體的空格是字串的一部分,如果預處理器將替換體解釋為記號型字串,這空格被視為空格的分割符
巨集可以實現類似函式的功能,帶有引數,稱為類函式巨集
#define square(x) x*x
//複雜一點的
#define pr(x) printf("%d\n", x)
用函式巨集有乙個原則就是實現的盡量是簡單的函式運算
坑點:
square
(x+2
)
大家可能認為輸出的會是(x+2)*(x+2)
,其實不是的,預處理器做的是將x用x+2替換,所以結果是x+2*x+2
用#
可以實現字串中引數的替換。
//x是字串的一部分沒有實現替換
#define pr(x) printf("x is %d", x)
//實現替換
#define pr(x) printf(#x "is %d", x)
用##
,可以將兩個記號粘合在一起(不帶空格),並且可以實現替換。
##
一定要用在兩個記號之間,不能是##xn
,必須要是x##n
用…和__va_args__來實現類函式巨集的引數可變
#define pr(...) printf(__va_args__)
c語言的巨集
今天想在巨集名中使用巨集,如 define macroname postfix,但是發現不行,好像c語言的巨集沒法弄出這種效果吧。暫時放一下,不琢磨了。c語言預處理命令詳解 c語言巨集 使用這麼乙個規則,可以建立乙個很有趣的技術 列印出乙個巨集被展開後的樣子,這樣可以 方便你分析 define to...
C語言巨集技巧 X巨集
本文介紹下x巨集的使用 首先簡單介紹下巨集的幾種用法 define strcat x,y x y define str x x define str x x define log x y 拼接xy x 單引號包裹 x x 字串化,雙引號包裹 x va args 會擴充套件引數.ansi c標準中有幾...
C語言中的巨集
c語言中如何使用巨集c 和c 中的巨集 macro 屬於編譯器預處理的範疇,屬於編譯期概念 而非執行期概念 下面對常遇到的巨集的使用問題做了簡單總結。在c語言的巨集中,的功能是將其後面的巨集引數進行字串化操作 stringfication 簡單說就是在對它所引用的巨集變數通過替換後在其左右各加上乙個...