<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