C 和 在巨集定義中的作用

2021-10-20 06:07:50 字數 786 閱讀 6610

將右邊的引數做整體的字串替換。

#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....