c 不定參數的函數

#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 )                            // 將指針置爲無效

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章