Compartir a través de


Macros (C/C++)

El preprocesador expande macros en todas las líneas excepto en las directivas de preprocesador, líneas que tienen # como primer carácter que no es de espacio en blanco. Expande macros en partes de algunas directivas que no se omiten como parte de una compilación condicional. Las directivas de compilación condicional permiten suprimir la compilación de partes de un archivo de código fuente. Prueban una expresión constante o un identificador para determinar qué bloques de texto se van a pasar al compilador y cuáles se van a quitar del archivo de origen durante el preprocesamiento.

La directiva #define se utiliza normalmente para asociar identificadores significativos con constantes, palabras clave e instrucciones o expresiones usadas con frecuencia. Los identificadores que representan constantes se denominan a veces constantes simbólicas o constantes del manifiesto. Los identificadores que representan instrucciones o expresiones se denominan macros. En esta documentación de preprocesador, solo se utiliza el término "macro".

Cuando el nombre de la macro se reconoce en el texto original del programa o en los argumentos de otros comandos de preprocesador determinados, se trata como una llamada a esa macro. El nombre de la macro se reemplaza por una copia del cuerpo de la macro. Si la macro acepta argumentos, los argumentos reales que siguen al nombre de la macro se sustituyen por los parámetros formales en el cuerpo de la macro. El proceso de reemplazar la llamada a una macro por la copia procesada del cuerpo se denomina expansión de la llamada a la macro.

En la práctica, hay dos tipos de macros. Las macros similares a objetos no toman argumentos. Las macros similares a función pueden definirse para aceptar argumentos de modo que parezcan y actúen como llamadas de función. Dado que las macros no representan llamadas de función reales, a veces se puede acelerar la ejecución de los programas reemplazando las llamadas de función por macros. (En C++, las funciones insertadas suelen ser un método preferido). Sin embargo, las macros pueden crear problemas si no se definen y se usan con cuidado. Puede que tenga que utilizar paréntesis en definiciones de macro con argumentos para conservar la prioridad correcta en una expresión. Además, puede que las macros no controlen correctamente las expresiones con efectos secundarios. Para más información, consulte el ejemplo getrandom en La directiva #define.

Una vez que haya definido una macro, no podrá volver a definirla en un valor diferente sin antes quitar la definición original. Sin embargo, puede volver a definir la macro con exactamente la misma definición. De este modo, la misma definición puede aparecer más de una vez en un programa.

La directiva #undef quita la definición de una macro. Una vez que haya quitado la definición, podrá volver a definir la macro en un valor diferente. La directiva #define y la directiva #undef analizan las directivas #define y #undef, respectivamente.

Para obtener más información, vea

Consulte también

Referencia del preprocesador de C/C++