zoukankan      html  css  js  c++  java
  • 可变形参

    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"@ ", buf);
      fflush(fp);
      va_end(ap);
     }
    }

  • 相关阅读:
    MYBATIS 的parameter
    深入了解MyBatis参数
    js之onload事件的一点使用心得
    js中document.write的那点事
    MyBatis直接执行SQL查询及批量插入数据
    ng 服务
    ng json格式的序列化和反序列化
    ng 自定义过滤器的创建和使用
    ng 过滤器
    ng 双向数据绑定 实现 注册协议效果
  • 原文地址:https://www.cnblogs.com/beijixing135132/p/3242054.html
Copyright © 2011-2022 走看看