最常見的就是
#indef __cplusplus
這表示支持C++語法
再如可以定義常量
#define MAX 100?
這跟JAVA全局變量有什么區(qū)別呢枉氮?
JAVA的變量是有類型的,這沒有類型暖庄,這只是替換而以聊替!
還有就是宏函數(shù),就是就是當(dāng)函數(shù)名太長時培廓,可以簡寫而以惹悄!
void cat_read(){
? ?printf("%s\n","input something");
}
#define jni(NAME) cat_##NAME();
void main(){
? ?jni(read);
? ?system("pause");
}
上面就是將cat_read這個方法函數(shù),變成了 jni(read)來調(diào)用肩钠!很簡單哇-
舉個日志輸出的例子
#define LOG(FORMAT,...) printf(##FORMAT,__VA_ARGS__);
void main(){
? ?LOG("%s","123");
? ?system("pause");
}
定義了一個LOG函數(shù)泣港,其實...表示不確定后面有幾個參數(shù)暂殖,也許1個,也許多個爷速,與后面的__VA_ARGS__對應(yīng)央星,這表示可變參數(shù),這是固定寫法
第一個參數(shù) FORMAT,并不是固定寫法惫东,可以替換成任意字符串莉给,比如NAME
再比如,日志會有級別廉沮,比如I級颓遏,這里可以這樣寫
#define LOG_I(FORMAT,...) printf("INFO:");printf(##FORMAT,__VA_ARGS__);
void main(){
? ?LOG_I("%s", "123");
? ?system("pause");
}
最終就會輸出:INFO:123
說穿了就是替換。在程序的預(yù)編譯期完成替換工作滞时。
再來個升級的LOG寫法
#define LOG(LEVEL,FORMAT,...) printf(##LEVEL); printf(##FORMAT,__VA_ARGS__);
#define LOG_I(FORMAT,...) LOG("INFO:",##FORMAT,__VA_ARGS__);
void main(){
? ?LOG_I("%s", "123");
system("pause");
}
相當(dāng)于第二個LOG_I的定義叁幢,又引用了第一個定義,相當(dāng)于替換了兩次