Compartilhar via


Recomendações para escolhendo entre funções e Macros

A maioria das rotinas de biblioteca de tempo de execução do Microsoft são compiladas ou montados funções, mas algumas rotinas são implementadas como macros.Quando um arquivo de cabeçalho declara uma função e uma versão de macro de uma rotina, a definição de macro prevalece, porque ela sempre aparece após a declaração de função.Quando você chama uma rotina que é implementada como uma função e de uma macro, você pode forçar o compilador a usar a versão da função de duas maneiras:

  • Coloque o nome de rotina entre parênteses.

    #include <ctype.h>
    a = _toupper(a);    // Use macro version of toupper.
    a = (_toupper)(a);  // Force compiler to use 
                        // function version of toupper.
    
  • Remover "-" a definição de macro com o #undef diretiva:

    #include <ctype.h>
    #undef _toupper
    

Se você precisar escolher entre uma função e uma implementação de macro de uma rotina de biblioteca, considere as seguintes variações:

  • Velocidade versus tamanho o principal benefício do uso de macros é mais rápido tempo de execução.Durante o pré-processamento, uma macro é expandida (substituída pela sua definição) embutido cada vez que for usada.Uma definição de função ocorre somente uma vez independentemente de quantas vezes ele é chamada.Macros podem aumentar o tamanho do código, mas não tem a sobrecarga associada a chamadas de função.

  • Função evaluation uma função é avaliada como um endereço; uma macro, não.Assim, você não pode usar um nome de macro em contextos que requerem um ponteiro.Por exemplo, você pode declarar um ponteiro para uma função, mas não um ponteiro para uma macro.

  • Verificação de tipo quando você declara uma função, o compilador pode verificar os tipos de argumento.Porque você não pode declarar uma macro, o compilador não pode verificar os tipos de argumento de macro; Embora ele pode verificar o número de argumentos que você passar para uma macro.

Consulte também

Referência

Recursos da biblioteca CRT