c++ 變長引數的作為引數
阿新 • • 發佈:2019-02-14
有時候不僅需要處理變長引數,還需要將變長引數作為引數,傳遞給其他函式。
先上一段程式碼,定義一個函式:
/*函式說明write_log, 向檔案中寫字串 *@param pf 檔案指標 *@param format 格式字串(與printf格式相同) *@param ... 可變長引數 */ void write_log(FILE* pf, const char* format, ...) { char szTemp[1024]; va_list v; va_start(v, format); vsprintf(szTemp, format, v); va_end(v); fwrite(szTemp, strlen(szTemp), 1, pf); }
函式的使用:
void main()
{
FILE * pf = fopen("test.txt", "a");
write_log(pf, "My name is %s, I am %d years old\n", "Jack", 15);
return;
}
結果為: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
);
熟悉了,就能夠玩轉可變長引數了。可變長引數真的能在關鍵的時候幹一些漂亮的事情。