Dominando Argumentos Variáveis em C: Guia Prático
Às vezes, você pode se deparar com uma situação em que deseja ter uma função que possa aceitar um número variável de argumentos, ou seja, parâmetros, em vez de um número predefinido de parâmetros. A linguagem de programação C fornece uma solução para esta situação e você pode definir uma função que pode aceitar um número variável de parâmetros com base na sua necessidade. O exemplo a seguir mostra a definição de tal função.
int func(int, ...) {
...
}
int main() {
func(1, 2, 3);
func(1, 2, 3, 4);
}
Deve-se notar que a função func() tem seu último argumento como reticências, ou seja, três pontos (...) e o logo antes das reticências é sempre um int que representará o número total de argumentos variáveis passados. Para usar essa funcionalidade, você precisa fazer uso do arquivo de cabeçalho stdarg.h, que fornece as funções e macros para implementar a funcionalidade de argumentos variáveis e seguir as etapas dadas:
Defina uma função com seu último parâmetro como reticências e o logo antes das reticências é sempre um int que representará o número de argumentos.
Crie uma variável do tipo va_list na definição da função. Este tipo é definido no arquivo de cabeçalho stdarg.h.
Use o parâmetro int e a macro va_start para inicializar a variável va_list para uma lista de argumentos. A macro va_start é definida no arquivo de cabeçalho stdarg.h.
Use a macro va_arg e a variável va_list para acessar cada item na lista de argumentos.
Use a macro va_end para limpar a memória atribuída à variável va_list.
Agora, vamos seguir as etapas acima e escrever uma função simples que pode aceitar um número variável de parâmetros e retornar sua média:
#include <stdio.h>
#include <stdarg.h>
double media(int num, ...) {
va_list valist;
double soma = 0.0;
int i;
/* inicializa valist para num número de argumentos */
va_start(valist, num);
/* acessa todos os argumentos atribuídos a valist */
for (i = 0; i < num; i++) {
soma += va_arg(valist, int);
}
/* limpa memória reservada para valist */
va_end(valist);
return soma/num;
}
int main() {
printf("Média de 2, 3, 4, 5 = %f\n", media(4, 2,3,4,5));
printf("Média de 5, 10, 15 = %f\n", media(3, 5,10,15));
return 0;
}
Quando o código acima é compilado e executado, produz o seguinte resultado. Deve-se notar que a função media() foi chamada duas vezes e cada vez o primeiro argumento representa o número total de argumentos variáveis sendo passados. Apenas reticências serão usadas para passar número variável de argumentos.
Média de 2, 3, 4, 5 = 3.500000 Média de 5, 10, 15 = 10.000000
Linguagem C
- Quatro Padrões Comprovados para Funções Definidas pelo Usuário em C
- Entendendo Classes de Armazenamento em C: Escopo, Tempo de Vida e Performance
- Como Passar Arrays 1D e 2D para Funções em C – Um Guia Prático
- Dominando Argumentos de Funções em Python: Parâmetros Posicionais, Nomeados e Padrão
- Variáveis e Tipos de Dados em C++: Guia Completo sobre int, double, char, string, bool
- Variáveis, Tipos de Dados e Constantes em C – Guia Prático
- Entendendo Atribuições em Verilog: Tipos, Sintaxe e Boas Práticas
- Entendendo Variáveis em C: Tipos, Regras de Nomenclatura e Gerenciamento de Memória
- Dominando Funções em C: Estrutura, Declaração e Boas Práticas
- Dominando Ponteiros em C: Passos Práticos para Programação Avançada