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

    int main()
    {
      myPrintf("%s %d\n","the result is ", sum(4, 45, 15, 45, 100));
      return 0;
    }

你可能感兴趣的:(C/C++中的可变参数函数)