有時候不僅需要處理變長引數,還需要將變長引數作為引數,傳遞給其他函式。
/*函式說明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 其實是乙個 很自然 的語言設施,除了語法稍顯詭異之外,習慣了就能馬上用...