關於C C 可變引數

2021-05-22 17:38:44 字數 645 閱讀 2083

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入棧 呼叫者負責清理堆...