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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值