宏定義&宏函數(shù)(日志輸出)define

最常見的就是

#indef __cplusplus

這表示支持C++語法

再如可以定義常量

#define MAX 100?

這跟JAVA全局變量有什么區(qū)別呢?

JAVA的變量是有類型的,這沒有類型,這只是替換而以!

還有就是宏函數(shù),就是就是當(dāng)函數(shù)名太長時(shí),可以簡寫而以!

void cat_read(){

? ?printf("%s\n","input something");

}

#define jni(NAME) cat_##NAME();

void main(){

? ?jni(read);

? ?system("pause");

}

上面就是將cat_read這個(gè)方法函數(shù),變成了 jni(read)來調(diào)用!很簡單哇-

舉個(gè)日志輸出的例子

#define LOG(FORMAT,...) printf(##FORMAT,__VA_ARGS__);

void main(){

? ?LOG("%s","123");

? ?system("pause");

}

定義了一個(gè)LOG函數(shù),其實(shí)...表示不確定后面有幾個(gè)參數(shù),也許1個(gè),也許多個(gè),與后面的__VA_ARGS__對應(yīng),這表示可變參數(shù),這是固定寫法

第一個(gè)參數(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ù)編譯期完成替換工作。

再來個(gè)升級的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)于第二個(gè)LOG_I的定義,又引用了第一個(gè)定義,相當(dāng)于替換了兩次

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容