歲月不饒人,這年紀大了記憶力真是差了很多。今天寫程式需要用到可變引數的巨集,可是忘了怎麼寫,這倒也沒什麼,因為我一向是不記憶這些語法細節的,反正我知道程式裡有個地方用到了這種技巧,但是可悲的是我忘了在哪個地方。搜尋?語法都忘了蒐個p呀。只好憑著印象,在自己負責的模組**中找了一圈,花了十幾分鐘才終於在日誌模組找到。唉,看來還是寫下來比較好,這記憶力實在是不能相信了。
c語言中,可變引數巨集的寫法有如下幾種形式:
#define
myprint_1
(fmt, ...)printf(fmt, __va_args__)
#define
myprint_2
(fmt, ...) printf(fmt,
##
__va_args__)
#define
myprint_3
(fmt, arg...) printf(fmt,
##
arg)
int
main(void)
注意:上面的三種形式在windows+mingw+gcc下編譯通過,可以使用,但是在tornado 2.2+vxworks 6.5下,前面兩種形式編譯會出錯,只有最後一種是可用的。
說實話,網上關於c語言可變引數巨集的文章浩如煙海,為什麼還要自己寫一篇這種文件?那就是網上的文章雖然很多,但是良莠不齊,找到篇文章看半天後,還得自己驗證一下,實在是耗時耗力,而自己記錄下來的,是已經在程式中實際使用,經過驗證的**,其正確性、可用性當然毋庸置疑,看了一眼馬上就能拿來用,省時省力,實在是個好辦法。唯一的缺點就是要寫文件,還要發表,有點麻煩,唉,那總也比到處翻**強啊。
valist c語言可變引數巨集
va list 是c語言中解決變參問題的一組巨集。1.api介紹 標頭檔案 cpp view plain copy print?include 下面是實現變參函式的一組巨集 macro cpp view plain copy print?void va start va list ap,last t...
C語言可變引數巨集定義方法
在gnu c中,巨集可以接受可變數目的引數,就象函式一樣,例如 1 2 define pr debug fmt,arg.printk kern debug fmt,arg 用可變引數巨集 variadic macros 傳遞可變參數列 你可能很熟悉在函式中使用可變參數列,如 1 voidprintf...
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...