C - Argumentos Variáveis
Às vezes, você pode se deparar com uma situação, quando deseja ter uma função, que pode receber 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 em 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 elipses, ou seja, três pontos (... ) e aquele imediatamente antes das elipses é sempre um int que representará o número total de argumentos de variável passados. Para usar essa funcionalidade, você precisa usar stdarg.h arquivo de cabeçalho que fornece as funções e macros para implementar a funcionalidade de argumentos de variáveis e siga as etapas fornecidas −
-
Defina uma função com seu último parâmetro como elipses e aquele imediatamente antes das elipses é sempre um int que representará o número de argumentos.
-
Crie uma va_list tipo variável na definição da função. Este tipo é definido no arquivo de cabeçalho stdarg.h.
-
Use int parâmetro e va_start macro para inicializar a va_list variável para uma lista de argumentos. A macro va_start é definida no arquivo de cabeçalho stdarg.h.
-
Use va_arg macro e va_list variável para acessar cada item na lista de argumentos.
-
Use uma macro va_end para limpar a memória atribuída a va_list variável.
Agora vamos seguir os passos acima e escrever uma função simples que pode pegar o número variável de parâmetros e retornar sua média −
Demonstração ao vivo
#include <stdio.h> #include <stdarg.h> double average(int num,...) { va_list valist; double sum = 0.0; int i; /* initialize valist for num number of arguments */ va_start(valist, num); /* access all the arguments assigned to valist */ for (i = 0; i < num; i++) { sum += va_arg(valist, int); } /* clean memory reserved for valist */ va_end(valist); return sum/num; } int main() { printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5)); printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15)); }
Quando o código acima é compilado e executado, ele produz o seguinte resultado. Deve-se notar que a função média() foi chamado duas vezes e cada vez o primeiro argumento representa o número total de argumentos variáveis sendo passados. Apenas elipses serão usadas para passar um número variável de argumentos.
Average of 2, 3, 4, 5 = 3.500000 Average of 5, 10, 15 = 10.000000
Linguagem C
- Tipos de funções definidas pelo usuário na programação C
- Classe de armazenamento C
- Passar arrays para uma função em C
- Argumentos da função Python
- Variáveis e tipos C++:int, double, char, string, bool
- Variável C, Tipos de Dados, Constantes
- Atribuições Verilog
- C - Variáveis
- C - Funções
- C - Ponteiros