1. 程式人生 > >c++ 變長引數的作為引數

c++ 變長引數的作為引數

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

先上一段程式碼,定義一個函式:

/*函式說明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 
); 

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