- 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)
Compilación condicional (#ifdef/#ifndef/#else/#endif)
Las directivas de compilación condicional permiten incluir y excluir fragmentos de código del proceso de compilación. Las directivas #ifdef y #ifndef marcan el inicio del fragmento de código que controlan. El fragmento termina con la directiva #endif . En el caso más sencillo, la sintaxis de #ifdef es la siguiente:
#ifdef macro_identifier
|
Si una macro con el identificador especificado se define arriba en el código utilizando #define, entonces este fragmento de código participará en la compilación. En caso contrario, se excluye. Además de las macros definidas en el código de la aplicación, el entorno proporciona un conjunto de constantes predefinidas; en concreto, los indicadores _RELEASE y _DEBUG (véase la sección Constantes predefinidas), cuyos nombres también pueden comprobarse en directivas de compilación condicional.
La forma extendida #ifdef permite especificar dos fragmentos de código: el primero se incluirá si el identificador de macro está definido, y el segundo si no lo está. Para ello, se inserta un separador de fragmentos #else entre #ifdef y #endif.
#ifdef macro_identifier
|
La directiva #ifndef funciona de forma similar, pero los fragmentos se incluyen y excluyen según la lógica inversa: si la macro especificada en el encabezado no está definida, se compila el primer fragmento, y si está definida, se compila el segundo fragmento.
Por ejemplo, dependiendo de la presencia de la sustitución de macro DEMO, podremos llamar o no a la función de cálculo de los números de Fibonacci.
#ifdef DEMO
|
En este caso, si el modo DEMO está activado, en lugar de llamar a la función se mostraría un mensaje en el registro, pero como en el script Preprocessor.mq5 y en todos los archivos incluidos no hay ninguna definición DEMO #define, la compilación procede de acuerdo con la rama #else, es decir, la llamada a la función FillFibo entra en el archivo ejecutable ex5.
Las directivas pueden anidarse.
#ifdef _DEBUG
|