诚信为本
量力而为
当前位置:峰汇在线 > MQL语言 > MQL5编程参考文档 > 正文

1.7.1 常量声明 (#define, #undef)

本文目录

#define直接用来指定常量助记名。有两种形式:

#define identifier expression // 无参数形式 
#define identifier(par1,... par8) expression // 参数形式

#define 直接代替 expression 为在源文件中找出更多的标识符目录。标识符仅代表自己时可被替换。如果标识符是注解一部分,字符串一部分或者其他标识符一部分,则不能代替。

常量标识符与变量名同样规则。值可以是多种类型:

#define ABC 100 
#define PI 3.14 
#define COMPANY_NAME "MetaQuotes Software Corp." 
... 
void ShowCopyright() 
{ 
Print("Copyright 2001-2009, ",COMPANY_NAME); 
Print("https://www.metaquotes.net"); 
}

expression 由几种标记组成,例如关键字,常量,有常量无常量表达式。expression在直线末端结束,不可转到下一行。

示例:

#define TWO 2 
#define THREE 3 
#define INCOMPLETE TWO+THREE 
#define COMPLETE (TWO+THREE) 
void OnStart() 
{ 
Print("2 + 3*2 = ",INCOMPLETE*2); 
Print("(2 + 3)*2 = ",COMPLETE*2); 
} 
// 结果 
// 2 + 3*2 = 8 
// (2 + 3)*2 = 10

参数形式 #define

通过参数形式,所有随后发现的标识符条目都将被考虑实际参数的表达式所取代。例如:

// a和b两个参数的示例 
#define A 2+3 
#define B 5-1 
#define MUL(a, b) ((a)*(b)) 

double c=MUL(A,B); 
Print("c=",c); 
/* 
expression double c=MUL(A,B); 
is equivalent to double c=((2+3)*(5-1)); 
*/ 
// 结果 
// c=20

使用参数表达式时一定要在圆括号中附上参数,这将有助于避免不易发现的不明显的错误。如果我们不使用括号重写代码,结果将会有所不同:

// a和b两个参数的示例 
#define A 2+3 
#define B 5-1 
#define MUL(a, b) a*b 

double c=MUL(A,B); 
Print("c=",c); 
/* 
expression double c=MUL(A,B); 
is equivalent to double c=2+3*5-1; 
*/ 
// 结果 
// c=16

使用参数形式时,最多允许8个参数。

// 正确的参数形式 
#define LOG(text) Print(__FILE__,"(",__LINE__,") :",text) // 一个参数 - 'text' 

// 不正确的参数形式 
#define WRONG_DEF(p1, p2, p3, p4, p5, p6, p7, p8, p9) p1+p2+p3+p4 // 从p1到p9的超过8个参数

#undef 指令

定义之前,#undef 指令取消宏替换声明。

示例:

#define MACRO 

void func1() 
{ 
#ifdef MACRO 
Print("MACRO is defined in ",__FUNCTION__); 
#else 
Print("MACRO is not defined in ",__FUNCTION__); 
#endif 
} 

#undef MACRO 

void func2() 
{ 
#ifdef MACRO 
Print("MACRO is defined in ",__FUNCTION__); 
#else 
Print("MACRO is not defined in ",__FUNCTION__); 
#endif 
} 

void OnStart() 
{ 
func1(); 
func2(); 
} 

/* Output: 
MACRO is defined in func1 
MACRO is not defined in func2 
*/
打赏
版权所有转载请注明标题及链接:峰汇在线 » 1.7.1 常量声明 (#define, #undef)
上一篇:
下一篇:
分享到: 更多 (0)

如您觉得此文不错请扫码打赏!

支付宝扫一扫打赏

微信扫一扫打赏