C/C++中的可变参数函数

  • 在C/C++里面,“函数可变参”在某些时候是很有用的,比如说再输出日志或者计算一些不清楚数目的数字的和。
  • 首先就是要用到的头文件
    #include
  • 要用到下面几个类型和方法:
    • va_list
      typedef char * va_list; //就是个指针
    • va_start
      va_start(ap,v) //将ap指向v之后的位置
    • va_arg
      va_arg(ap,t) // 取出ap的值,并将ap指向下一个位置。t就是类型,可以是int,double等等
    • va_end
      va_end(ap) //// 置空
  • 附上源码
    #include
    #include
    #include
    int sum(int n, ...)
    {
    ??va_list arg_ptr;
    ??int i = 0, nRes = 0;
    ??va_start(arg_ptr, n);
    ??for(; i < n; ++i)
    ??{
    ????int temp = va_arg(arg_ptr, int);
    ????nRes += temp;
    ??}
    ??va_end(arg_ptr);
    ??return nRes;
    }
    void myPrintf(const char *strFormat, ...)
    {
    ??if(NULL==strFormat) return;
    ??va_list arg_ptr;
    ??va_start(arg_ptr, strFormat);
    ??char strInfo[1000] = {0}; // 小心别溢出?
    ??vsprintf(strInfo, strFormat, arg_ptr); // 按格式打印到strInfo,功能类似sprintf
    ??fputs(strInfo, stdout);
    ??va_end(arg_ptr);
    }
    【C/C++中的可变参数函数】int main()
    {
    ??myPrintf("%s %d\n","the result is ", sum(4, 45, 15, 45, 100));
    ??return 0;
    }

    推荐阅读