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 de 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 essas funções. Coisas que você precisa
+
compilador Intermediate C + C + + com IDE , como o Microsoft Visual C + +
Show Mais instruções
1
Adicione o arquivo de biblioteca em STDARG.H seu programa. É onde você define as macros. Na primeira linha do arquivo, inserir # include .
2
Use o va_arg macros, va_start e v_end que colaborar com o va_type em stdarg.h .
3
Estabelecer uma variável do tipo va_list funcionar como um marcador de lista.
4
Acesse os parâmetros individuais usando a macro va_arg . Encontre uma maneira de dizer a macro va_arg que tipo de argumento que você quer que ele para recuperar a fornecer o número correto de bytes da pilha.
5
converter o resultado do Passo 4 para o tipo que você quiser ser.
6
Chame o macro va_end para terminar o processamento de parâmetros variáveis .
7
Veja o exemplo abaixo que demonstra as etapas de 2 a 6. Myprintf função aceita uma seqüência de formato que especifica o tipo ea posição de cada argumento. Após a seqüência de formato é a lista de argumentos. A função imprime os argumentos. Para simplificar , pode apenas int processo , float e char:
//declaração
anular myprintf (char * formato , ...);
//defintion
myprintf void ( char * formato , . .. ) {
va_list vl ;
int i;
va_start ( vl , args );
for (i = 0; args [ i] = '\\ 0' ; ! + + i) {
união any_t {
int i;
float f ;
char c ; }
houver;
if ( args [ i] == ' i ') {
any.i = va_arg ( vl , int) ;
printf ("% i \\ n" , any.i );
} else if (
args [ i] == ' f ' ) {
any.f = va_arg ( vl , float) ;
printf (" % f \\ n", any.f ); } else
if ( args [ i] == ' c') {
any.c = va_arg ( vl , char );
printf (" % c \\ n", any.c );
} else {
jogar SomeException ;
}
va_end ( vl ); }