#include <iostream>
#include "stdlib.h"
#include "assert.h"
using namespace std;
//可变长参数的学习
#include <stdarg.h>
#define END -1
int va_sum(int first_num, ...)
{
// (1) 定义参数列表
va_list ap;
// (2) 初始化参数列表
va_start(ap, first_num);
int result = first_num;
int temp = 0;
// 获取参数值
while ((temp = va_arg(ap, int)) != END)
{
result += temp;
}
// 关闭参数列表
va_end(ap);
return result;
}
int va_printf1(char* var1, ...)
{
// (1) 定义参数列表
va_list ap;
// (2) 初始化参数列表
va_start(ap, var1);
char *p, *sval;
int ival;
double dval;
for (p = var1; *p; p++)
{
if (*p != '%')
{
putchar(*p);
continue;
}
switch (*++p)
{
case 'd':
ival = va_arg(ap, int);
printf("%d", ival);
break;
case 'f':
dval = va_arg(ap, double);
printf("%f", dval);
break;
case 's':
sval = va_arg(ap, char *);
printf("%s", sval);
//for (sval = va_arg(ap, char *); *sval; sval++)
// putchar(*sval);
break;
default:
putchar(*p);
break;
}
}
// 关闭参数列表
va_end(ap);
return true;
}
main函数……
int main()
{
int sum_val = va_sum(1, 2, 3, 4, 5, END);
printf("sum_val 可变长参数测试 %d\n", sum_val);
va_printf1("%d %f %s %s", 1, 2.0, "you ", "how do you do ");
cout << endl;
system("pause");
return 0;
}
测试输出: