Descrição:
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:
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:
//EXEMPLO STDARG.h
#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;
}
>clang-7 -pthread -lm -o main main.c
>./main
8! = 40320