記錄log巨集定義可變引數的幾種處理方式

2021-08-02 12:13:50 字數 898 閱讀 9522

用gcc和c99的可變引數巨集, 可以更方便地列印除錯資訊,在gcc的預處理提供的可變引數巨集定義非常方便,具體大致有以下3種方式。

#ifdef debug

#define dbgprint(format,args...) fprintf(stderr, format, ##args)

#else

#define dbgprint(format,args...)

#endif

如此定義之後,如果有debug的巨集定義,這個我們可以很方便的子啊makefile中控制,而不用修改源**,這樣在需要除錯的時候**中就可以用dbgprint了,例如dbgprint(「%s」,str);

#define dgbmsg(fmt,...) printf(fmt,__va_args__)
程式**:

#include 

#include

#define logstrings(fm, ...) printf(fm,__va_args__)

int main()

『…』指可變引數。這類巨集在被呼叫時,它(這裡指』…』)被表示成零個或多個符號,包括裡面的逗號,一直到到右括弧結束為止。當被呼叫時,在巨集體(macro body)中,那些符號串行集合將代替裡面的va_args識別符號。但現在似乎只有gcc才支援。

#define

debug(args) (printf("debug: "), printf(args))

debug("i = %d" _ i);

這樣也可以實現可變變數的列印,也很直觀,缺點就是必須多寫一對括號。

可變引數的巨集定義

link todo 原理 printf 和fprintf 這些輸出函式的引數是可變的,在除錯程式時,你可能希望定義自己的引數可變的輸出函式,那麼可變引數巨集會是乙個選擇。c99中規定巨集可以像函式一樣帶有可變引數,比如 define log format,fprintf stdout,format,...

可變引數的巨集定義

rintf 和fprintf 這些輸出函式的引數是可變的,在除錯程式時,你可能希望定義自己的引數可變的輸出函式,那麼可變引數巨集會是乙個選擇。c99中規定巨集可以像函式一樣帶有可變引數,比如 define log format,fprintf stdout,format,va args 其中,表示引...

定義可變引數的巨集

像printf類的函式,如果 中的比較多,且需要檢查返回值時,沒用到乙個地方就新增一段返回值檢查會比較煩,不新增,如果要求pclint掃瞄時會報warning 514。為了方便,有兩種方式,一種是封裝自己的函式,一種是定義成巨集。封裝成自己的函式的壞處時,函式裡的輸出如果使用 line functi...