C C 中的可變引數

2022-06-23 12:51:50 字數 648 閱讀 5933

所需的函式引數不固定,需要用到帶有可變引數的函式,類似printf();專案中需要列印資訊等也會用到帶可變引數的函式。

1/*2

va_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);

view code

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