用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...