c 變長引數的作為引數

2021-06-28 16:43:18 字數 876 閱讀 1684

有時候不僅需要處理變長引數,還需要將變長引數作為引數,傳遞給其他函式。

/*函式說明write_log, 向檔案中寫字串

*@param pf 檔案指標

*@param format 格式字串(與printf格式相同)

*@param ... 可變長引數

*/void write_log(file* pf, const char* format, ...)

函式的使用:

void main()

結果為:my name is jack, i am 15 years old

可變長引數作為引數的引數型別,可以參考vsprintf

int vsprintf(

char *buffer,

const char *format,

va_list argptr

);

因此,只要把可變長引數的巨集定義以及幾個函式:

type va_arg(

va_list arg_ptr,

type

);void va_end(

va_list arg_ptr

);void va_start(

va_list arg_ptr,

prev_param

); // (ansi version)

void va_start(

arg_ptr

);

熟悉了,就能夠玩轉可變長引數了。可變長引數真的能在關鍵的時候幹一些漂亮的事情。

c 變長引數

c 在支援變長引數時,用到了三個巨集,va start va arg va end,和乙個資料型別va list。談談我對他們使用上理解吧 va list ptr 首先定義乙個該型別的指標 va start ptr,parm1 該型別指標和入參的第乙個引數關聯 type va arg ptr,tpy...

C 變長引數

如果c 的變長引數經過了多輪的呼叫,就可能失去作用 間接引址,但是只能引用到第乙個變長引數。va start marker,format s loggers filename loglinef format,va arg marker,va list va end marker va start m...

C 變長模板引數

自 c 11 語言核心的改進中,最為關注的有 rvalue reference 這裡有一篇拙作 lambda,variadic template。rvalue 規則稍微複雜,但一旦理解和記住了,應用上就沒有什麼困難。lambda 其實是乙個 很自然 的語言設施,除了語法稍顯詭異之外,習慣了就能馬上用...