Todos já viram como faz uma função, mas se alguém ficou curioso para saber como funciona algumas funções no C/C++ como a printf() e scanf() que a quantidade de argumentos é variável, fique sabendo que é possível fazer isso com qualquer função. Veja como fazer:
Sempre inclua a biblioteca stdarg.h no C ou cstdarg no C++ para usar as funções de parâmetros variáveis.
Existem 3 funções e um tipo de dado que irão ser necessárias dentro da função na qual vai querer ter parâmetros indefinidos, São elas:
void va_arg(va_list argptr,tipo de dado do parâmetro variável);
type va_start(va_list argptr,nome do último parâmetro conhecido);
void va_end(va_list argptr);
Para fazer uma função com número variável de argumentos, faça o seguinte:
Inclua a biblioteca stdarg.h no C ou cstdarg no C++;
Declare a função com pelo menos um parâmetro conhecido (para o controle do número de argumentos variáveis que irão ser passados na função);
Ex.: void imprimeStrings(int parametroConhecido,...); (inclua reticências no lugar do segundo parâmetro)
Sempre encerre a função com a função va_end();
Exemplo de programa:
#include <stdio.h> #include <stdarg.h> // Sempre inclua essa biblioteca! #include <conio.h> // Biblioteca para a função getch().
void imprimeNumeros(int ,...);
int main(int argc,char **argv) { imprimeNumeros(5,5,4,3,2,1); getch(); imprimeNumeros(4,5,4,3,2); getch(); return 0; } void imprimeNumeros(int quantidadeDeParametros,...) { int numero; int contador; va_list argptr; // Declare uma variável do tipo va_list na função, o nome "argptr" pode ser trocado. va_start(argptr,quantidadeDeParametros); /* Inicie a função va_start colocando o nome da variável de tipo va_list declarada anteriormente e o nome do último parâmetro conhecido*/ for(contador=1;contador<=quantidade;contador++) /* Estabeleça uma forma de controle, pois a função não saberá quantos parâmetros recebeu.*/ { numero=va_arg(argptr,int); printf("%d\n",numero); /* Cada vez que for acionada, a va_arg retornará o valor de um parâmetro variável, caso acabem os parâmetros variáveis, ele retornará lixo de memória, necessitando de um controle. O va_arg tem como parâmetro a variável va_list declarada anteriormente e o tipo de dado do argumento variável.*/ } va_end(argptr); // Sempre coloque a função va_end no final. A va_end recebe o nome da variável va_list declarada anteriormente. return; } [/codebox]
Vale lembrar que a função não sabe quantos argumentos variáveis recebeu e o tipo delas (se é int, float, etc.) e o va_arg sempre que for acionada, retornará um parâmetro variável. Quando acabar os parâmetros variáveis, ele retornará lixo de memória.
O primeiro parâmetro da função deve ser um meio da função saber quantos parâmetros que está recebendo.
Pergunta
bruce845
Todos já viram como faz uma função, mas se alguém ficou curioso para saber como funciona algumas funções no C/C++ como a printf() e scanf() que a quantidade de argumentos é variável, fique sabendo que é possível fazer isso com qualquer função. Veja como fazer:
Sempre inclua a biblioteca stdarg.h no C ou cstdarg no C++ para usar as funções de parâmetros variáveis.
Existem 3 funções e um tipo de dado que irão ser necessárias dentro da função na qual vai querer ter parâmetros indefinidos, São elas:
void va_arg(va_list argptr,tipo de dado do parâmetro variável);
type va_start(va_list argptr,nome do último parâmetro conhecido);
void va_end(va_list argptr);
Para fazer uma função com número variável de argumentos, faça o seguinte:
- Inclua a biblioteca stdarg.h no C ou cstdarg no C++;
- Declare a função com pelo menos um parâmetro conhecido (para o controle do número de argumentos variáveis que irão ser passados na função);
- Sempre encerre a função com a função va_end();
Exemplo de programa:Ex.: void imprimeStrings(int parametroConhecido,...); (inclua reticências no lugar do segundo parâmetro)
Vale lembrar que a função não sabe quantos argumentos variáveis recebeu e o tipo delas (se é int, float, etc.) e o va_arg sempre que for acionada, retornará um parâmetro variável. Quando acabar os parâmetros variáveis, ele retornará lixo de memória.
O primeiro parâmetro da função deve ser um meio da função saber quantos parâmetros que está recebendo.
Espero ter ajudado!
Editado por bruce845Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.