可变形参

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

posted @ 2013-08-06 21:49  beijixing135132  阅读(305)  评论(0编辑  收藏  举报