Next: Sobrecarga de nome de
Up: Funções
Previous: Parâmetros default
  Sumário
Em algumas raras ocasiões, pode ser desejável definir uma
função com um número variável de argumentos -- um
bom exemplo deste tipo de necessidade é a função
printf. Como em ANSI-C, C ++ pode usar macros definidas em
stdarg.h para atingir este objetivo. Entretanto, como C ++ é mais rígido com relação à prototipagem de
funções, é preciso um mecanismo que indique esta
liberdade no número de argumentos. Este mecanismo é o uso de
três pontos ...
no protótipo da função.
O exemplo a seguir ilustra o uso deste mecanismo.
indentation
#include
iostream.h
#include
stdarg.h
// Declare a function with one required parameter
void display_var(int number,
);
main()
{
int index = 5;
int one = 1, two = 2;
display_var(one, index);
display_var(3, index, index + two, index + one);
display_var(two, 7, 3);
}
void display_var(int number,
)
{
va_list param_pt;
va_start(param_pt,number); // Call the setup macro
cout
"The parameters are ";
for (int index = 0 ; index
number ; index++)
cout
va_arg(param_pt,int)
; // Extract a parameter
cout
begintex2html_wrap_inline$$n";
va_end(param_pt); // Closing macro
}
Neste exemplo, o protótipo indica que um argumento do tipo
int é requerido na chamada da função; após
este argumento, o compilador não faz mais nenhuma
verificação de tipos de dados sendo passado para a
função. É tarefa do programador garantir que os dados
sendo passados são do tipo esperado.
O resultado da execução deste exemplo simples é
apresentado abaixo.
The parameters are 5
The parameters are 5 7 6
The parameters are 7 3
Este mecanismo, apesar de presente por questões de completude da
linguagem, deve ser evitado. Seu uso pode levar à obscuridade de
código, tornando entendimento e manutenção tarefas mais
difíceis.
Next: Sobrecarga de nome de
Up: Funções
Previous: Parâmetros default
  Sumário
Ivan Luiz Marques Ricarte
2001-06-01