天天看點

[随筆]#define宏定義可變參數的使用

開門見山,如下便是今天想随筆記錄的可變參數宏定義

其中的…就表示可傳入以逗号隔開的多參數。

舉例,

實際項目開發中,需要實作log列印的level控制,如下例子,隻有on為真時,才會列印log,否則為空,即不列印log。

#define LOG(on, Format...)  \
if(on){                     \
    printf(Format)          \
}else{                      \
    //Do nothing            \
}
           

如有函數functionA() call到LOG函數,如下:

void functionA(void){
    INT8 i=;
    ......
    LOG(, "This is the first example\n");  //例子1
    ......
    LOG(, "This is the second example i = %d\n", i);  //例子2
}
           

此函數中,

例子1:在預編譯時,告訴編譯器Format展開為一個參數,即LOG傳入了兩個參數;

例子2:在預編譯時,告訴編譯器Format展開為兩個參數,即LOG傳入了三個參數。

如有錯誤,歡迎指正。

繼續閱讀