在C/C++里面,“函数可变参”在某些时候是很有用的,比如说再输出日志或者计算一些不清楚数目的数字的和。
-
首先就是要用到的头文件
#include<stdarg.h>
-
要用到下面几个类型和方法:
- 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) //// 置空
- va_list
-
附上源码
#include <iostream>
#include <stdarg.h>
#include <stdio.h>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;
}