stdarg.h és una capçalera de la biblioteca estàndard C del llenguatge de programació C que permet que les funcions acceptin un nombre indefinit d'arguments. Proporciona facilitats per passar per una llista d'arguments de funció de nombre i tipus desconeguts. C++ proporciona aquesta funcionalitat a la capçalera cstdarg .

El contingut de stdarg.h s'utilitza normalment en funcions variàdiques, encara que es poden utilitzar en altres funcions (per exemple, vprintf ) cridades per funcions variàdiques.

Declaració de funcions variàdiques Les funcions variàdiques són funcions que poden prendre un nombre variable d'arguments i es declaren amb punts suspensius en lloc de l'últim paràmetre. Un exemple d'aquesta funció és printf. Una declaració típica ésint check(int a, double b, ...);Les funcions variàdiques han de tenir almenys un paràmetre anomenat, per tant, per exemple,char *wrong(...);no està permès en C. (En C++ i C23, aquesta declaració està permesa.) En C, una coma ha de precedir els punts suspensius si s'especifica un paràmetre amb nom; en C++, és opcional.

tipus stdarg.h NomDescripcióCompatibilitatva_listescriviu per iterar argumentsC89

Accés als arguments Per accedir als arguments sense nom, cal declarar una variable de tipus va_list a la funció variadic. La macro va_start s'anomena llavors amb dos arguments: el primer és la variable declarada del tipus va_list, el segon és el nom de l'últim paràmetre de la funció. En C23 el segon argument serà opcional i no s'avaluarà. Després d'això, cada invocació de la macro va_arg produeix el següent argument. El primer argument de va_arg és va_list i el segon és el tipus del següent argument passat a la funció. Finalment, la macro va_end s'ha de cridar a la va_list abans que torni la funció. (No cal llegir tots els arguments.)

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

/* print all args one at a time until a negative argument is seen; all args are assumed to be of int type */ void printargs(int arg1, ...) { va_list ap; int i;

va_start(ap, arg1); for (i = arg1; i >= 0; i = va_arg(ap, int)) printf("%d ", i); va_end(ap); putchar('\n'); }

int main(void) { printargs(5, 2, 14, 84, 97, 15, -1, 48, -1); printargs(84, 51, -1, 3); printargs(-1); printargs(1, -1); return 0; }Aquest programa dona la sortida:5 2 14 84 97 15 84 51

1

Referències

Categoria:Llenguatge de programació C