A maioria das funções aceitar um número fixo de argumentos. Algumas aplicações, no entanto, exigem funções para aceitar parâmetros variáveis. Um exemplo bem conhecido é a função de impressão do C. Para esses casos, C ++ oferece uma solução poderosa que permite que o compilador decifrar os argumentos em tempo de execução. Leia sobre para um tutorial que demonstra como implementar tais funções.
Coisas que você precisa
- Intermediate C ++
- C ++ compilador com IDE, como o Microsoft Visual C ++
instruções
Adicione o arquivo de biblioteca stdarg.h em seu programa. Isso é onde você define as macros. Na primeira linha do arquivo, insira #include lt; stdarg.h gt ;.
Use a macros va_arg, va_start e v_end que colaboram com o va_type em stdarg.h.
Estabelecer uma variável do tipo va_list para funcionar como um marcador de lista.
Acesse os parâmetros individuais usando a macro va_arg. Encontrar uma maneira de dizer a macro va_arg que tipo de argumento que você quer que ele recupere a fornecer o número correto de bytes da pilha.
Converter o resultado da Etapa 4 para o tipo que você quer que ele seja.
Chamar a macro va_end para terminar o processamento de parâmetros variáveis.
Veja o exemplo abaixo que demonstra as etapas de 2 a 6. Função myprintf aceita uma seqüência de formato que especifica o tipo ea posição de cada argumento. Seguindo a cadeia de formato é a lista de argumentos. A função imprime os argumentos. Por simplicidade só pode processo int, float e carvão:
// declaração
vazio myprintf (char formato, ...) -
// defintion
vazio myprintf (char formato, ...) {
va_list VL
int i-
va_start (vl, args) -
for (i = 0- args [i]! = ` 0`- ++ i) {
any_t union {
int i-
flutuar f-
Char c-
} qualquer-
if (args [i] == `i`) {any.i = va_arg (vl, int) -
printf ( "%dentro", Any.i) -}outro
if (args [i] == `f`) {any.f = va_arg (vl, float) -
printf ( "% F n", Any.f) -}outro
if (args [i] == `c`) {any.c = va_arg (vl, char) -
printf ( "% C n", Any.c) -}
outro{
jogue SomeException-
}
va_end (VL) -
}