學習筆記 巨集定義基礎

2021-07-02 16:48:45 字數 851 閱讀 4590

在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 巨集名 字串 表示這是一條預處理命令 巨集名,是乙個識別符號,要符合識別符號的命名規則,並要求大寫 字串的位置可以是常量 表示式 格式字串 注意 巨集定義不是語句,不需要在末尾加分...