spesso vedo una funzione dichiarata come questo:In una dichiarazione di funzione C, cosa fa "..." come fa l'ultimo parametro?
void Feeder(char *buff, ...)
cosa significa "..." significa?
spesso vedo una funzione dichiarata come questo:In una dichiarazione di funzione C, cosa fa "..." come fa l'ultimo parametro?
void Feeder(char *buff, ...)
cosa significa "..." significa?
consente un numero variabile di argomenti di tipo non specificato (come printf
).
si deve accedere loro con va_start
, va_arg
e va_end
vedere http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html per ulteriori informazioni
Ciò significa che un variadic function è essere dichiarato.
Funzione Variadica sono funzioni che possono assumere un numero variabile di argomenti e sono dichiarate con un'ellissi in luogo dell'ultimo parametro. Un esempio di tale funzione è
printf
.Una dichiarazione tipica è
int check(int a, double b, ...);
Funzione Variadica devono avere almeno un parametro denominato, così, ad esempio,
char *wrong(...);
non è ammesso nel C.
L' i tre punti "..." sono chiamati ellissi. Usandoli in una funzione, questa funzione diventa una funzione variadica. Per utilizzarli in una dichiarazione di funzione significa che la funzione accetterà un numero arbitrario di parametri dopo quelli già definiti.
Ad esempio:
Feeder("abc");
Feeder("abc", "def");
sono tutte le chiamate funzione valida, tuttavia la seguente non sussisterebbe:
Feeder();
Funzione Variadica (parametri multipli)
#include <stdarg.h>
double average(int count, ...)
{
va_list ap;
int j;
double tot = 0;
va_start(ap, count); //Requires the last fixed parameter (to get the address)
for(j=0; j<count; j++)
tot+=va_arg(ap, double); //Requires the type to cast to. Increments ap to the next argument.
va_end(ap);
return tot/count;
}