有些函式的引數個數是可變,例如printf()函式,其函式原型為:
int printf( const char* format, ...);
它除了有乙個引數format固定以外,後面跟的引數的個數和型別是可變的(用三個點「…」做引數佔位符),實際呼叫時可以有以下的形式:
printf("%d",i);
printf("%s",s);
printf("the number is %d ,string is:%s", i, s);
// 初始化va_list變數arg_ptr,用來儲存引數位址的指標
// prev_param是可變引數列表的前乙個引數,即最後乙個固定引數
void va_start( va_list arg_ptr, prev_param );
// 根據引數的型別,通過va_list變數arg_ptr來獲取引數的值
type va_arg( va_list arg_ptr, type );
// 結束可變引數處理
void va_end( va_list arg_ptr );
va在這裡是variable-argument(可變引數)的意思。 這些巨集定義在stdarg.h中,所以用到可變引數的程式應該包含這個標頭檔案。
void printlog(char* format, …)
void myprintlog(char *format, va_list args)
else if (format[i+1] == 'd')
else
}else
}if (i == len-1)
// logtext為最終的列印資訊
printf("%s", logtext);
}
C語言中函式可變引數解析
大多數時候,函式中形式引數的數目通常是確定的,在呼叫時要依次給出與形式引數對應的所有實際引數。但在某些情況下希望函式的引數個數可以根據需要確定。典型的例子有 大家熟悉的函式printf scanf 可變引數的實現 c語言標頭檔案stdarg.h提供了乙個資料型別va list和三個巨集 va sta...
可變引數列印 解析可變引數
1.的一般用法 define str s s define cons a,b int a e b int main 2.接受,列印可變引數 參考 glibc庫的bebug函式 define printf fmt,args.printf fmt,args 使用方法 define pr debug fm...
c 語言可變引數
1 當無法列出傳遞函式的所有實參的型別和數目時,可用省略號指定參數列 void foo void foo parm list,2 函式引數的傳遞原理 函式引數是以資料結構 棧的形式訪問,從右至左入棧.eg include void fun int a,int main output 12 343 獲...