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

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

MSDN可變長參數地址:https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(%22STDARG%2fVA_START%22);k(VA_START);k(DevLang-%22C%2B%2B%22);k(TargetOS-WINDOWS)&rd=true

發佈了24 篇原創文章 · 獲贊 27 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章