所需的函式引數不固定,需要用到帶有可變引數的函式,類似printf();專案中需要列印資訊等也會用到帶可變引數的函式。
1/*2view codeva_list 用來定義乙個指標變數,該指標變數表示引數列表中的各個引數;3*/
4va_list ap;56
/*7初始化指標變數,ap指向函式引數列表中的第乙個可選引數,v是第乙個可選引數之前的固定引數8*/
9va_start(ap,v);
1011
/*12
返回引數列表中指標ap所指的引數,返回型別為type,並讓ap指向引數列表的下乙個引數
13*/
14va_arg(ap,type);
1516
/*17
清空引數列表,並置指標無效
18*/
19 va_end(ap);
1使用:void addlog(const
char*log, ...)
2
const參考:char* chlog = "
wh win";
addlog(
"%s!
", chlog);
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入棧 呼叫者負責清理堆...