C語言可變引數解析方法

2021-10-07 08:12:51 字數 941 閱讀 5491

有些函式的引數個數是可變,例如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 獲...