需要借用C語言的VA_LIST 宏定義,及相關操作來實現可變引數。
VA_LIST 所在標頭檔案:#include <stdarg.h>,用法如下:
(1)首先在函數里定義一具VA_LIST型的變數,這個變數是指向引數的指標;
(2)然後用VA_START宏初始化剛定義的VA_LIST變數;
(3)然後用VA_ARG返回可變的引數,VA_ARG的第二個引數是你要返回的引數的型別(如果函式有多個可變引數的,依次呼叫VA_ARG獲取各個引數);
(4)最後用VA_END宏結束可變引數的獲取。
以下是一個自定義列印介面的實現:
int my_printf(const char *fmt, ...)//...表示引數可變{ va_list args;//定義va_list static char gc_PrintfOutBuff[1000]; va_start(args, fmt);//初始化 vsnprintf((char *) gc_PrintfOutBuff, 1000, (char *) fmt, args);//這裡沒有使用VA_ARG取回單個變數,而是借用vsnprinf一次性讀取。 va_end(args);//結束獲取 puts("%s",(const char *)gc_PrintfOutBuff);//使用。 return 0;}
需要借用C語言的VA_LIST 宏定義,及相關操作來實現可變引數。
VA_LIST 所在標頭檔案:#include <stdarg.h>,用法如下:
(1)首先在函數里定義一具VA_LIST型的變數,這個變數是指向引數的指標;
(2)然後用VA_START宏初始化剛定義的VA_LIST變數;
(3)然後用VA_ARG返回可變的引數,VA_ARG的第二個引數是你要返回的引數的型別(如果函式有多個可變引數的,依次呼叫VA_ARG獲取各個引數);
(4)最後用VA_END宏結束可變引數的獲取。
以下是一個自定義列印介面的實現:
int my_printf(const char *fmt, ...)//...表示引數可變{ va_list args;//定義va_list static char gc_PrintfOutBuff[1000]; va_start(args, fmt);//初始化 vsnprintf((char *) gc_PrintfOutBuff, 1000, (char *) fmt, args);//這裡沒有使用VA_ARG取回單個變數,而是借用vsnprinf一次性讀取。 va_end(args);//結束獲取 puts("%s",(const char *)gc_PrintfOutBuff);//使用。 return 0;}