c/c++可變引數例子
#include
#include
int proc(char *fmt,...)
;int main()
程式結果: test 1 66.000000
函式名: vsprintf
功 能: 格式化輸出到串中
用 法: int vsprintf(char *string, char *format, va_list param);
va_list的用法( va_list 是在c語言中解決變參問題的一組巨集):
(1)首先在函式裡定義一具va_list型的變數,這個變數是指向引數的指標
(2)然後用va_start巨集初始化變數剛定義的va_list變數(如在執行va_start(ap,v)後,ap指向第乙個可變引數在堆疊位址)
(3)然後用va_arg返回可變的引數,va_arg的第二個引數是你要返回的引數的型別。
(4)最後用va_end巨集結束可變引數的獲取。然後你就可以在函式裡使用第二個引數了。如果函式有多個可變引數的,依次呼叫va_arg獲取各個引數。
C C 可變引數
函式 使用va list巨集組解決變參問題 1 首先定義va list型的變數,這個變數是指向引數的指標。2 然後用va start巨集初始化剛定義的va list變數,這個巨集的第二個引數是 第乙個可變引數的前乙個引數 3 再用va arg得到可變引數,第二個引數是 可變引數 的型別。4 最後用v...
C C 可變引數
函式 使用va list巨集組解決變參問題 1 首先定義va list型的變數,這個變數是指向引數的指標。2 然後用va start巨集初始化剛定義的va list變數,這個巨集的第二個引數是 第乙個可變引數的前乙個引數 3 再用va arg得到可變引數,第二個引數是 可變引數 的型別。4 最後用v...
C C 可變引數
為了解決這些問題,我們首先要解釋cdecl呼叫約定 參見論調用約定 所有使用不定引數的函式必須是使用cdecl 全域性函式 或者this call 類成員函式 呼叫約定。該約定對於引數傳遞規定如下 引數從右向左入棧 也就是如果你呼叫f a,b,c 則c先入棧,然後是b,最後是a入棧 呼叫者負責清理堆...