Compartilhar via


Recomendações para escolher entre funções e macros

A maioria das rotinas de biblioteca de time de execução Microsoft são compiladas ou montado funções, mas algumas rotinas são implementadas sistema autônomo 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 terá precedência, porque ela sempre aparece após a declaração de função.Quando você chama uma rotina é implementada sistema autônomo uma função e uma macro, você pode forçar o compilador a usar a versão da função de duas maneiras:

  • Coloque o nome da 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 vantagens e desvantagens de cada:

  • Velocidade versus dimensionar O principal benefício do uso de macros é mais rápido time de execução.Durante o pré-processamento, uma macro é expandida (substituído pela sua definição) in-line cada vez que é usado.Uma definição de função ocorre somente uma vez independentemente de quantas vezes ele é chamada.As macros podem aumentar o dimensionar do código, mas não têm a sobrecarga associada a chamadas de função.

  • Avaliação de função Uma função é avaliada como um endereço; uma macro não.Assim, não é possível 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 tipos de argumento de macro; embora ele pode verificar o número de argumentos você passar para uma macro.

Consulte também

Referência

C em time de execução bibliotecas