將右邊的引數做整體的字串替換。
#define string(x) #x#x
#define text(x) "name"#x"__"
inttest()
將左右兩邊的引數做整體的字串拼接替換。
#define class_name(name) class##name
#define merge(a,b) a##b##a
inttest()
對於#的引數,即便是另乙個巨集,也不展開,仍然作為字串字面資訊輸出。
同#,對於##的引數,即便是另乙個巨集,也不展開,仍然作為字串字面資訊輸出。
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
inttest()
// h(f(1, 2)) -> h(12) -> g(12) -> "12"
// g(f(1, 2)) -> "f(1, 2)"
對於function-like macro的引數,如果是#或者##的運算元,則會馬上擴充套件為相應的字串;否則會先擴充套件,再替換,迴圈此操作,直到完成。
對於h(f(1,2)),由於h(a)是非#或##的普通巨集,需要先巨集展開其引數a,即展開f(1,2)為12,則h(a) 巨集替換為h(12),進而巨集替換為g(12), 進而巨集替換為12。
對於g(f(1,2)),由於g(a) 是#巨集,會馬上替換成"f(1,2)"這個字串。
和 在巨集替換中的作用
include define f a,b a b define g a a define h a g a int main 首先需要了解 和 的意義。將右邊的引數做整體的字串替換。define g a a 則g hello world hello world g sleep 1 sleep 1 對於...
python 巨集替換 和 在巨集替換中的作用
include define f a,b a b define g a a define h a g a int main printf s n h f 1,2 printf s n g f 1,2 return 0 首先需要了解 和 的意義。將右邊的引數做整體的字串替換。define g a a ...
關於 和 在C語言的巨集中的使用
原文參考 關於 和 在c語言的巨集中,我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.define str s s define cons a,b int a e b printf str vck 輸出字串 vck printf d n cons 2,3 2e3 輸出 2000 1....