Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Recomendaciones para elegir las funciones y macros de Entre

la mayoría de las rutinas de biblioteca en tiempo de ejecución de Microsoft son funciones compiladas o ensambladas, pero algunas rutinas se implementan como macros. Cuando un archivo de encabezado declara una función y una versión de macro de una rutina, la definición de macro tiene prioridad, porque siempre aparece después de la declaración de función. Cuando se invoca una rutina que se implementa como una función y macro, puede hacer que el compilador para utilizar la versión de la función de dos maneras:

  • Agregue el nombre tiene entre paréntesis.

    #include <ctype.h>
    a = _toupper(a);    // Use macro version of toupper.
    a = (_toupper)(a);  // Force compiler to use 
                        // function version of toupper.
    
  • “Anular” la definición de macro con la directiva de #undef :

    #include <ctype.h>
    #undef _toupper
    

Si necesita elegir entre una función y una implementación de macro de una rutina de biblioteca, considere las compensaciones siguientes:

  • La ventaja principal deVelocidad con el tamaño The de utilizar macros es un runtime más rápido. Durante el preprocesamiento, una macro es (reemplazado por la definición) insertado expandido cada vez que se utiliza. Una definición de función sólo aparece una vez independientemente de cuántas veces se denomina. Las macros pueden aumentar el tamaño de código pero no tienen la sobrecarga asociada con llamadas de función.

  • la función deevaluación de función A evalúa una dirección; una macro no. Así no puede utilizar un nombre de macro en contextos que requieren un puntero. Por ejemplo, puede declarar un puntero a una función, pero no un puntero a una macro.

  • Comprobación de tipos Cuando se declara una función, el compilador puede comprobar los tipos de argumentos. Porque no se puede declarar una macro, el compilador no puede comprobar tipos de argumentos de macro; aunque puede comprobar el número de argumentos que se pasan a una macro.

Adiciones de comunidad

AGREGAR
Mostrar: