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:

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:
              
//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;
}
              
            
Saída do terminal:
              
  >clang-7 -pthread -lm -o main main.c
  >./main
  8! = 40320