在c/c++中,巨集定義是由define完成的。
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
f(1,2) 輸出:12 輸出格式為%d ,若為%s則報錯
g(f(1,2)) 輸出:f(1,2) 輸出格式%s
h(f(1,2)) 輸出:12 輸出格式%s
最外層巨集可替換至最內層再轉換,中間層則馬上被轉換。
define中有三個特殊的符號值得我們注意:
1. #:在巨集展開的時候會將#後面的引數替換成字串,如:
#define p(str) printf(#str);
呼叫p(this is test)的時候會將#exp換成"this is test"
2. ##:將前後兩個的單詞拼接在一起。例如:
#define cat(x,y) x##y
呼叫cat(test,123)展開後成為test123.
3. #@:將值序列變為乙個字元
#define ch(c) #@c
呼叫ch(a)展開後成為'a'.
例: #define a(x) t_##x
#define b(x) #@x
#define c(x) #x
x=1替換為:
a(1)------> t_1 (t_##x,##符號是記號粘黏符號,將前後的字元粘黏起來。)
b(1)------> '1' ( #@x , #@ 符號會將巨集的引數進行字串字面量化,並且加『』號)
c(1)------> "1" ( #x ,#符號會將巨集的引數進行字串字面量化,並且加""號)
巨集定義 C語言基礎學習筆記
define include ifndef define maxszie 10000帶引數的巨集 define add x,y x y define plus x,y add x,y define add x,y x y 呼叫 plus plus a,b c 呼叫結果 就是按照順序巢狀 最終 c b...
巨集定義筆記
巨集定義有兩種 簡單巨集定義,帶引數的巨集定義。簡單巨集定義 define 識別符號 替換列表 define為常量命名的優點 1.程式會更易讀 2.程式更易於修改 3.可以幫助避免前後不一致或鍵盤輸入錯誤 其他應用 1.可以對c語法做小的修改 define begin 之間的空格符是可以任意的甚至可...
C語言基礎學習筆記 巨集
巨集定義 define用來定義乙個識別符號和乙個字串,用這個識別符號替代這個字串。1.不帶引數的巨集定義 define 巨集名 字串 表示這是一條預處理命令 巨集名,是乙個識別符號,要符合識別符號的命名規則,並要求大寫 字串的位置可以是常量 表示式 格式字串 注意 巨集定義不是語句,不需要在末尾加分...