2012-12-01 163 views
-1

可能重複:
C/C++: Passing variable number of arguments around可變數目參數的C函數

我怎樣才能做到這一點具有可變數量的參數的函數。 例如:

 typedef enum{ 
       Circle, /* has an int argument (int colour)*/ 
       Square /* has a char argument (char name)*/ 
     }things; 

     /* if arg is a ball I want an int (with colour) argument in f*/ 
     /* if arg is a square I want a char (with name) argument in f*/ 
     void f (things arg, ...){ 
     } 

這可能在同一個函數f辦?謝謝

+0

你檢查這一點: - http://stackoverflow.com/questions/205529/c-c-passing-variable-number-of-arguments-around? –

+0

@Zeta這個問題是關於將變量參數傳遞給另一個函數,而不是如何首先獲取可變參數。 – Barmar

回答

0

是的。這是如何完成的example

0

這是一個example它完成了,它發現了可變數量的最大值。

#include <stdlib.h> 
#include <stdarg.h> 
#include <stdio.h> 

int maxof(int, ...) ; 
void f(void); 

main(){ 
     f(); 
     exit(EXIT SUCCESS); 
} 

int maxof(int n args, ...){ 
     register int i; 
     int max, a; 
     va_list ap; 

     va_start(ap, n args); 
     max = va_arg(ap, int); 
     for(i = 2; i <= n_args; i++) { 
       if((a = va_arg(ap, int)) > max) 
         max = a; 
     } 

     va_end(ap); 
     return max; 
} 

void f(void) { 
     int i = 5; 
     int j[256]; 
     j[42] = 24; 
     printf("%d\n",maxof(3, i, j[42], 0)); 
}