C 應用 debug控制巨集 巨集可變變數

2021-10-23 22:37:03 字數 1192 閱讀 7617

這個網上還是有很多資料的,但是有的時候想找去找不到,自己記錄一下。方便下次查詢。

通過控制巨集定義debug 來控制gui_debug的定義方式。

**如下:

#define debug 1

#ifdef debug

#define gui_debug(format,value) printf("[ %s, %05d ] :\t"format":%s\n", __function__, __line__, value)

#else

#define gui_debug(format,...)

#endif

如上:還不能實現printf("%s%s%s...",value1,value2,value3,...)這種可以變引數

c99中規定巨集可以像函式一樣帶有可變引數,比如:

#define log(format, ...) fprintf(stdout, format, __va_args__)

其中,...表示引數可變,__va_args__在預處理中為實際的引數集所替換。

#ifndef __gui_debug_h__

#define __gui_debug_h__

#define debug 1

#ifdef debug

#define gui_debug(format,...) printf("[ %s, %05d ] :\t"format"\n", __function__, __line__, ##__va_args__)

#else

#define gui_debug(format,...)

#endif

#endif

1、通過巨集定義控制debug巨集實現

2、通過巨集定義可變引數(__va_args__)來實現printf的可變引數定義

結果如下:

#define gui_debug(format,...) printf("[ %s, %05d ] :\t"format"\n", __function__, __line__, ##__va_args__)

C語言可變引數巨集

歲月不饒人,這年紀大了記憶力真是差了很多。今天寫程式需要用到可變引數的巨集,可是忘了怎麼寫,這倒也沒什麼,因為我一向是不記憶這些語法細節的,反正我知道程式裡有個地方用到了這種技巧,但是可悲的是我忘了在哪個地方。搜尋?語法都忘了蒐個p呀。只好憑著印象,在自己負責的模組 中找了一圈,花了十幾分鐘才終於在...

C 可變引數的巨集

可變引數的巨集 1.可變引數的巨集是c99規範開始支援的,具體用法如下 define debug printf va args 預設號代表乙個可以變化的參數列。使用保留名 va args 把引數傳遞給巨集。當巨集的呼叫展開時,實際的引數就傳遞給 printf 了。如果預設號之前有逗號,就要寫成下面的...

C可變引數 printf(巨集處理可變引數)

x86平台下的巨集定義 typedef char va list 記憶體對齊 與sizeof int 對齊 0 sizeof n 4,intsizeof n 4 4 sizeof n 8,intsizeof n 8 define intsizeof n sizeof n sizeof int 1 s...