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.