c 不定参数的函数

来源:互联网 发布:小米擦除数据 编辑:程序博客网 时间:2024/04/17 07:26

#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 )                            // 将指针置为无效