Stdarg.h

De la Viquipèdia, l'enciclopèdia lliure
stdarg.h

TipusC header file (en) Tradueix Modifica el valor a Wikidata
Part deC standard library, Biblioteca C POSIX i Biblioteca estàndard de C++ Modifica el valor a Wikidata
Característiques tècniques
PlataformaBiblioteca 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 dóna la sortida:

5 2 14 84 97 15
84 51

1

Referències[modifica]

  1. «IEEE Std 1003.1 stdarg.h». [Consulta: 4 juliol 2009].
  2. «<cstdarg> (stdarg.h)». [Consulta: 25 desembre 2023].
  3. Gilding, Alex. «WG14-N2975 : Relax requirements for variadic parameter lists, v3», 15-04-2022.
  4. Gilding, Alex. «WG14-N2975 : Relax requirements for variadic parameter lists, v3», 15-04-2022.