<stdarg.h>

No cabeçalho encontram-se macros e tipos extremamente úteis, no que tange a criação de funções para as quais a quantidade de argumentos não tem uma quantidade finita definida. Assim, o cabeçalho <stdarg.h> é de muita valia com tais recursos, uma vez que o planejamento de funções sem um número fixo de argumentos torna-se algo viável.

Tipos

  • va_list: armazena os valores passados como argumento na função em que for declarado.

Macros

  • va_start(va_list nTermos, ...): inicializa os n termos passado como argumento na função para a variável nTermos.

  • va_arg(va_list nTermos, tipo das variáveis passadas como argumento): percorre a lista dos argumentos na ordem em que eles foram passados.

  • va_end(va_list nTermos): deve ser chamada imediatamente antes da função em que as macros estão sendo utilizadas retornar algum valor.

Funções

Não há funções nesta biblioteca.

Exemplo de uso

#include <stdio.h>
#include <stdarg.h>
  
int multiplica(int nTermos, ...) {
    va_list listaTermos;
    va_start(listaTermos, nTermos);
  
    int resultado = 1;
  
    for (int i = 0; i < nTermos; i++)
        resultado = resultado*va_arg(listaTermos, int);
  
    va_end(listaTermos);
  
    return resultado;
}
  
int main() {
    printf("8! = %d\n", multiplica(7, 8, 7, 6, 5, 4, 3, 2));
  
    return 0;
}

Saída do terminal

>clang-7 -pthread -lm -o main main.c
>./main
8! = 40320