可变形参

1、系统中有一些关于可变形参的方法,#include<stdarg.h>

  va_list实际上只是一个参数指针,

   va_start根据你提供的最后一个固定参数来获取第一个可变参数的地址,

    va_arg将指针指向下一个可变参数然后返回当前值,

    va_end只是简单的将指针清0.

 

string SumStrNew(int nCount, ...)
{    
 string str;   
 va_list vl = 0;    //参数指针
 va_start(vl, nCount);  //获得第一个参数开始
 for(int i=0; i<nCount; ++i)
 {       
  char* p = va_arg(vl, char*);  //得到当前参数值,然后指向下一个参数    
  cout <<  p << endl;   
  str += p;    
 }    
 cout << "SumStrNew:" << str << endl << endl;  
 return str;

 

2、利用可变参数打印调试信息到文件中

 #define Dump(fp, ...)  debug_print(fp, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)//打印源文件名、行号、函数名、参数

会调用一些系统的输出方法:vsprintf按照%d%s...等格式来输出、vsprintf_s、fputs、fflush

void debug_print(FILE * fp, const char * filename, const int line, const char * funcname, char *fmt, ...)
{
 if(NULL != fp)
 {
  char buf[BUF_SIZE];
  time_t t;
  struct tm * now;
  va_list ap;

  time(&t);
  now = localtime(&t);
  va_start(ap, fmt);
  fprintf(fp, "%04d-%02d-%02d %02d:%02d:%02d -- %s(%d):%s DEBUG:@\"", now -> tm_year + 1900, now -> tm_mon + 1, now -> tm_mday, now -> tm_hour, now -> tm_min, now -> tm_sec, filename, line, funcname);
  vsprintf_s(buf,BUF_SIZE, fmt, ap);
  fprintf(fp, "%s\"@\n", buf);
  fflush(fp);
  va_end(ap);
 }
}

转载于:https://www.cnblogs.com/beijixing135132/p/3242054.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值