Como usar funções de parâmetros variáveis ​​em c ++

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

  1. 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 ;.

  2. Use a macros va_arg, va_start e v_end que colaboram com o va_type em stdarg.h.

  3. Estabelecer uma variável do tipo va_list para funcionar como um marcador de lista.

  4. 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.

  5. Converter o resultado da Etapa 4 para o tipo que você quer que ele seja.

  6. Chamar a 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. 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) -

    }

recursos

De esta maneira? Compartilhar em redes sociais:

LiveInternet