Descargar MetaTrader 5
Manual de referencia de MQL5Bases del lenguajePreprocesadorCompilación condicional (#ifdef, #ifndef, #else, #endif) 

Compilación condicional (#ifdef, #ifndef, #else, #endif)

Las directivas de compilación condicional del preprocesador permiten compilar u omitir una parte del programa dependiendo del cumplimiento de una cierta condición.

Esta condición puede tomar una de las siguientes formas.

#ifdef identifier
   // el código ubicado aquí se compila si identifier ya ha sido definido para el preprocesador en la directiva #define.
#endif

#ifndef identifier
   // el código ubicado aquí se compila si identifier en este momento no está definido por la directiva del preprocesador #define.
#endif

Después de cualquier directiva de compilación condicional puede ir cualquier número de líneas que posiblemente contengan la directiva #else y se terminan con #endif. Si la condición a comprobar es cierta, las líneas entre #else y #endif se ignoran. Si la condición a comprobar no se cumple, se ignoran todas las líneas entre la comprobación y la directiva #else (si ésta no existe, entre la comprobación y la directiva #endif).

Ejemplo:

#ifndef TestMode
   #define TestMode
#endif
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   #ifdef TestMode
      Print("Test mode");
   #else
      Print("Normal mode");
   #endif
  }

En función del tipo del programa y el modo de compilación, las macros estándar se definen de la siguiente manera:

La macro __MQL5__  se define cuando se compila *.mq5, la macro __MQL4__ se define cuando se compila *.mq4.
La macro _DEBUG se define cuando se compila en modo de depuración.
La macro _RELEASE se define cuando se compila en modo de realización.

Ejemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   #ifdef __MQL5__
      #ifdef _DEBUG
         Print("Hello from MQL5 compiler [DEBUG]");
      #else
        #ifdef _RELEASE
           Print("Hello from MQL5 compiler [RELEASE]");
        #endif
     #endif
   #else
      #ifdef __MQL4__
         #ifdef _DEBUG
           Print("Hello from MQL4 compiler [DEBUG]");
        #else
           #ifdef _RELEASE
              Print("Hello from MQL4 compiler [RELEASE]");
           #endif
        #endif
     #endif
   #endif
  }