- Inclusión de archivos fuente (#include)
- Visión general de las directivas de sustitución de macros
- Forma simple de #define
- Forma de #define como pseudofunción
- Operadores especiales '#' y '##' dentro de definiciones #define
- Anulación de la sustitución de macros (#undef)
- Constantes predefinidas del preprocesador
- Compilación condicional (#ifdef/#ifndef/#else/#endif)
- Propiedades generales del programa (#property)
Visión general de las directivas de sustitución de macros
Las directivas de sustitución de macros incluyen dos formas de la directiva #define:
- simple, normalmente para definir una constante;
- definición de una macro como una pseudofunción con parámetros.
Además, existe una directiva #undef para deshacer cualquiera de las definiciones anteriores de #define. Si no se utiliza #undef, cada macro definida será válida hasta el final de la compilación del código fuente.
Las macros se registran y luego se utilizan en el código por su nombre, siguiendo las reglas de los identificadores. Por convención, los nombres de las macros se escriben en mayúsculas. Los nombres de las macros pueden superponerse a los nombres de variables, funciones y otros elementos del código fuente. El uso intencionado de este hecho otorga la flexibilidad de cambiar y generar código fuente sobre la marcha. Sin embargo, la coincidencia involuntaria de un nombre de macro con un elemento del programa dará lugar a errores.
El principio de funcionamiento de ambas formas de sustitución de macros es el mismo. Mediante la directiva #define se introduce un identificador que se asocia a un determinado fragmento de texto, o definición. Si el preprocesador encuentra un identificador dado más adelante en el código fuente, lo sustituye por el texto asociado al mismo. Hacemos hincapié en que el nombre de la macro sólo se puede utilizar en el código compilado después del registro (esto es similar a los principios de declaración de variables, pero sólo en la etapa de compilación).
La sustitución del nombre de una macro por su definición se denomina expansión. El análisis del código fuente se produce progresivamente y por una línea en una pasada, pero la expansión en cada línea puede realizarse un número arbitrario de veces, como en un bucle, siempre que se encuentren nombres de macros en el resultado. No puede incluir el mismo nombre en una definición de macro: al sustituirla, una macro de este tipo dará lugar a un error de «identificador desconocido».
En la Parte 3 del libro hablaremos de las plantillas, que también le permiten generar (o, de hecho, replicar) código fuente, pero con reglas diferentes. Si hay tanto directivas de sustitución de macros como plantillas en el código fuente, primero se expanden las macros y luego se genera el código a partir de las plantillas.
Los nombres de las macros aparecen resaltados en rojo en el MetaEditor.