- 包括源文件 (#include)
- 宏替换指令概述
- 简单形式的 #define
- #define 作为伪函数的形式
- #define 定义中的特殊运算符 # 和 ##
- 取消宏替换 (#undef)
- 预定义的预处理器常量
- 条件编译 (#ifdef/#ifndef/#else/#endif)
- 常规程序属性 (#property)
条件编译 (#ifdef/#ifndef/#else/#endif)
条件编译指令允许你在编译过程中包含和排除代码片段。#ifdef 和 #ifndef 指令标记由它们控制的代码片段的开始。该代码片段以 #endif 指令结束。#ifdef 语法的最简单形式如下:
#ifdef macro_identifier
|
如果使用 #define 在代码上方定义了具有指定标识符的宏,那么这个代码片段将参与编译。否则会将其排除。除了应用程序代码中定义的宏之外,环境中还提供了一组预定义的常量,特别是 _RELEASE 和 _DEBUG 标志(参见 预定义常量一节):也可以在条件编译指令中检查它们的名称。
扩展形式 #ifdef 允许指定两段代码:如果定义了宏标识符,将包含第一段代码,如果没有定义,将包含第二段代码。为此,在 #ifdef 和 #endif 之间插入一个片段分隔符 #else 。
#ifdef macro_identifier
|
#ifndef 指令的工作方式相似,但是片段的包含和排除是按照相反的逻辑进行的:如果头文件中指定的宏没有定义,则编译第一个片段,如果定义了,则编译第二个片段。
例如,根据是否存在 DEMO 宏替换,我们可能会也可能不会调用函数以计算斐波那契数。
#ifdef DEMO
|
在这种情况下,如果启用了 DEMO 模式,将在日志中显示一条消息,而不是调用函数,但是由于在 Preprocessor.mq5 脚本和所有包含文件中都没有 #define DEMO 定义,所以编译将根据分支 #else 进行,即对 FillFibo 函数的调用将进入可执行文件 ex5。
指令可以嵌套。
#ifdef _DEBUG
|