下载MetaTrader 5
MQL5参考语言基础预处理程序条件编译 (#ifdef, #ifndef, #else, #endif) 

条件编译 (#ifdef, #ifndef, #else, #endif)

预处理条件编译指令允许根据某个条件的实现编译或跳过程序的一部分。

条件可以采取下列形式之一。

#ifdef identifier
   // 如果#define指令已经为预处理器定义标识符那么就会编译位于这里的代码。
#endif

#ifndef identifier
   // 如果#define预处理器指令当前没有定义标识符则编译位于这里的代码。
#endif

任何条件编译指令可以跟在任何行数之后可能包含#else指令并以#endif结束。如果验证条件是真的,#else和#endif之间的行即被忽略。如果验证条件不满足,所有检查和#else之间的指令(或#endif指令如果前者不在)即被忽略。

例如:

#ifndef TestMode
   #define TestMode
#endif
//+------------------------------------------------------------------+
//| 脚本程序开始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
   #ifdef TestMode
      Print("Test mode");
   #else
      Print("Normal mode");
   #endif
  }

根据程序类型和编译模式,按以下方式定义标准宏:

__MQL5__  macro在编译*.mq5文件时定义, __MQL4__ macro在编译*.mq4文件时定义。
_DEBUG macro 在debug模式编译时定义。
_RELEASE macro 在release模式编译时定义。

示例:

//+------------------------------------------------------------------+
//| 脚本程序开始函数                                                   |
//+------------------------------------------------------------------+
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
  }

 


更新: 2015.12.03