Buscar
 
 

Resultados por:
 


Rechercher Busca avançada

Relogio

Funções com número variável de argumentos - void func(int a, ...);

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Funções com número variável de argumentos - void func(int a, ...);

Mensagem  Diego Henrix em Dom Jan 27, 2013 5:02 pm

Uma possibilidade interessante em linguagem C é o uso de funções que podem manipular um numero não conhecido de argumentos. Como exemplo pose-se citar as funções scanf() e printf().

Existe uma biblioteca padrão da linguagem c que possibilita esse trabalho. É a stdarg.h.

Para usar uma função desse tipo deve-se incluir a biblioteca strarg.h e declarar um protótipo da seguinte forma:

void func(int a, ...); //sim, isso é possivel.

-É necessário que ao menos um argumento seja conhecido, o int a no exemplo acima ou a string passada a scanf() e printf().

Para tratar os argumentos dentro da função usa-se:

va_list argptr; //declara uma lista de argumentos
va_start(argptr, n); //inicializa a lista de argumentos

va_arg(argptr, int); //obtém um argumento inteiro da lista

va_end(argptr); //encerra a lista, desaloca a memória usada e etc...


- Código Exemplo -
Nesse programa é usada uma função que soma uma quantidade qualquer de números inteiros informada no primeiro argumento, ou seja, se envia o número de argumentos que se pretende somar seguido dos proprios números. Note que a função é usada a primeira vez com 3 argumentos e depois com seis, sem a necessidade de redefinição!

Código:

#include<stdio.h>
#include<stdarg.h>

int sum(int n, ...);

int main()
{
  int d;

  d = sum(2, 4, 5);
  printf("soma: %d\n", d);

  d = sum(5, 1, 7, 56, 43, 888);
  printf("soma: %d\n", d);

  return 0;
}

int sum(int n, ...)
{
  int soma = 0, obtido;
  va_list argptr;

  va_start(argptr, n);

  for( ; n>0; n--)
  {
    obtido = va_arg(argptr, int);
    soma += obtido;
  }

  va_end(argptr);
  return soma;
}

Mais em:
http://codare.net/2007/05/23/c-cpp-funcoes-com-numero-variavel-de-parametros-stdargs/


Valeu... Wink

Diego Henrix

Mensagens : 7
Data de inscrição : 04/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum