#include <stdio.h>
#include <string.h>
#include <stdarg.h>
void arg_int( int count, ... );
void arg_str( int count, ...);
int main()
{
arg_int(3,3,2,1);
arg_str(3, "hello ", "world", "!");
getchar();
getchar();
return 0;
}
void arg_str( int count, ... )
{
va_list arg_ptr;
va_start(arg_ptr, count);
for (int i=0; i<count; i++)//count 为参数的个数
{
char* p = va_arg(arg_ptr, char*);//char* 表示后面参数是char*类型的
printf(p);
}
va_end(arg_ptr);
}
void arg_int(int count, ...)
{
va_list arg_ptr;
va_start(arg_ptr, count);
for(int i = 0; i < count; i++)
{
int value = va_arg(arg_ptr, int);
printf("value%d=%d/n", i+1, value);
}
va_end(arg_ptr);
}
在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义:
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) //第一个可选参数地址
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) //下一个参数地址
#define va_end(ap) ( ap = (va_list)0 ) // 将指针置为无效