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.