Stdarg.h
Tipus | C header file (en) ![]() ![]() |
---|---|
Part de | C standard library, Biblioteca C POSIX i Biblioteca estàndard de C++ ![]() |
Característiques tècniques | |
Plataforma | Biblioteca estàndard C |
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.[1] 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.[2]
Declaració de funcions variàdiques
[modifica]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 és
int 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,[3] 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
[modifica]Nom | Descripció | Compatibilitat |
---|---|---|
va_list
|
escriviu per iterar arguments | C89 |
Accés als arguments
[modifica]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à.[4] 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
[modifica]#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
[modifica]- ↑ «IEEE Std 1003.1
stdarg.h
». [Consulta: 4 juliol 2009]. - ↑ «<cstdarg> (stdarg.h)». [Consulta: 25 desembre 2023].
- ↑ Gilding, Alex. «WG14-N2975 : Relax requirements for variadic parameter lists, v3», 15-04-2022.
- ↑ Gilding, Alex. «WG14-N2975 : Relax requirements for variadic parameter lists, v3», 15-04-2022.