C/stdarg.h

En Galilibros, o Wikibooks en galego.
< C
C
← Volver a signal.h stdarg.h Seguir con stdbool.h


Este ficheiro de cabeceira permite que as funcións poidan recibir un número indefinido de argumentos. Pode incluírse nun código fonte mediante a seguinte directriz:

#include <stdarg.h>

Declaración e definición de funcións con argumentos indefinidos[editar]

As funcións que poden recibir un número variable e indefinido de argumentos defínense con puntos suspensivos como último parámetro. Un exemplo de declaración podería ser o seguinte:

int comprobar(int a, double b, ...);

Este tipo de funcións deben ter polo menos un parámetro identificado, polo que un exemplo como o seguinte non sería correcto:

int incorrecto(...);

O mesmo se aplica para a definición. Seguindo o exemplo correcto anterior:

int comprobar(int a, double b, ...){
    // Ordes da función.
}

Tipos[editar]

Tipo Descrición
va_list Tipo para argumentos iterativos.

Claves[editar]

Clave Descrición
va_start Iniciar os argumentos iterativos cun va_list.
va_arg Recibir un argumento.
va_end Liberar un va_list.
va_copy Copiar o contido dun va_list noutro.

Acceder aos argumentos indefinidos[editar]

Para acceder aos argumentos indefinidos, hai que declarar unha variable do tipo v_list na función con argumentos indefinidos. Nese momento chámase á clave va_start con dous argumentos: o primeiro é o declarado do tipo va_list e o segundo é o nome do último parámetro chamado da función. Despois cada chamada á clave va_arg dá paso ao seguinte argumento. O primeiro argumento para va_arg é o va_list e o seguinte é do tipo do seguinte argumento fornecido á función. Para rematar, a clave va_end debe chamarse dende o va_list antes de que a función devolva a execución (non é obrigatorio ler todos os argumentos).

Non existe ningún mecanismo para determinar a cantidade ou o tipo dos argumentos indefinidos pasados á función. A función debe sabelo ou determinalo dalgún xeito, que varía segundo o caso. Entre as convencións máis comúns están:

  • Utilizar unha cadea cun formato similar ao usado por funcións coma printf() ou scanf() con especificadores incluídos que indiquen o tipo dos argumentos.
  • Un valor sentinela ao final dos argumentos indefinidos.
  • Un contador de argumentos sinalando a cantidade de argumentos indefinidos.


C
← Volver a signal.h stdarg.h Seguir con stdbool.h