程序的通用特性 (#property)
使用 #property 指令,程序员可以设置 MQL 程序的一些特性。其中一些特性是通用的,即适用于任何程序,我们将在这里分析这些特性。其余特性是 MQL5 程序特定类型的典型特性,将在第五章中介绍 MQL5 API 的相关节中讨论。
#property 指令的格式如下:
#property key value |
最主要的是下表第一列中列出的一种特性。第二列说明如何解释该值。
特性 |
值 |
|---|---|
copyright |
包含版权所有者信息的字符串 |
link |
带有开发人员网站链接的字符串 |
version |
带有程序版本号的字符串(对于 MQL5 市场,必须是 X.Y 格式,其中 X 和 Y 是对应于主要和次要内部版本号的整数) |
description |
包含程序说明的行(允许多个 #description 指令,并且它们的内容是组合的) |
icon |
字符串,程序徽标(ICO 格式)文件的路径 |
stacksize |
以字节为单位指定栈大小的整数(默认从 4 MB 到 16 MB,取决于程序类型和环境,1 MB = 1024*1024 字节);如有必要,大小可增至 64 MB(最大值)。 |
上述所有字符串特性都是程序特性对话框的信息来源,该对话框在程序启动时打开。但对于脚本,默认不显示此对话框。若要更改此行为,必须另外指定 #property script_show_inputs 指令。此外,当鼠标光标悬停在 MetaTrader 5 Navigator 中的程序上时,有关权限的信息会显示在工具提示中。
copyright、link 和 version 特性已经本书前面的例子中介绍过。
栈大小 stacksize 只是一个建议:如果编译器发现源代码中的局部变量(通常是数组)超过了指定的值,栈将在编译期间自动增大,但最多不超过 64 MB。如果超过此限制,程序甚至无法启动:在日志(Log 标签,而不是 Experts)中,出现错误“栈大小超过 64MB。请减少局部变量占用的内存”。
请注意,此类分析和阻止启动行为仅考虑启动时程序的固定快照。在递归函数调用的情况下,栈内存消耗会显著增加,并导致栈溢出错误,但这已经在程序执行阶段发生了。有关栈的更多信息,参见 描述数组中的说明。
#property 指令只在编译后的 mq5 文件中有效,在所有用 #include 包含的文件中,该指令会被忽略。