我正在查看一些旧的MetaEditor4 / MQL4
代码,其中一个局部变量被声明了两次:
......
1 int start()
2 {
3 if (1==2)
4 {
5 double myVar = 1;
6 } else
7 {
8 double myVar = 2;
9 }
10 return;
11 }
.......
MetaEditor版本5.00, build 1601
中的编译过程失败了:
第8行
'myVar' - variable already defined
。
如果我删除第8行,编译进展顺利。
1 即可。 MetaEditor中是否有任何选项可以容忍局部变量的多重声明?
2 即可。在以前版本的MetaTrader Terminal 4 / MetaEditor和.MQ4
代码中:在这种情况下,是否可以多次声明局部变量?
第3 即可。 MetaEditor的版本为5.00, build 1601
,但代码的扩展名为.mq4
,它与MetaTrader终端软件MetaTrader4
(来自FXCM)一起安装。因此,我假设我仍然可以使用.MQ4
代码。有没有机会从某个地方获得纯MQL4安装?
每当我安装mt4(例如:mt4 download)时,它就会结束
使用mt5安装程序。
答案 0 :(得分:0)
#property strict
放在文件的开头答案 1 :(得分:0)
MQL4的世界在不断发展。人们可能试图绕过这个事实,但最后,在一个人自己的失望中,避免进化的尝试迟早会徒劳无功。
由于需要重新设计代码库,需要跨越几十年的几十个人,我可以告诉你很多关于什么有效,哪些无效的故事。
MQL4.56789
如果只考虑一件事,不要试图“绕过”New-MQL4,而是重新审视代码并重构“旧代码” - 这是一种更安全的生存方式(更长的方式)。 / p>
是的,有机会(零权证,暂时只剩下几个机会)新的编译器版本仍然能够生成代码的可执行版本,但是已经有一套新的规则已经进入城市,游戏不会持续很长时间。
如果编译器的新版本定义任何变量仅相对于其有效范围声明,那么认真的程序员应该将此作为一般原则。上面的代码实际上还有其他问题,正确地固定在有效范围内:
2 ...
3 if ( 1 == 2 ) {
4 ...
5 double myVar = 1; // myVar declared & known |since HERE >
6 ... // masking any other,|known HERE :
7 ... // |known HERE :
8 } else // |till HERE . Undef further
9 {
10 ...
11 double myVar = 2; // myVar declared & known |since HERE >
12 // masking any other,|known HERE :
13 ... // |known HERE :
14 } // |till HERE . Undef further
因此,如果有任何_global_
范围变量具有相同名称 myVar
,则在存在本地声明的变量时,它将不会“可见”,穿着相同的名字。
最后,让代码执行从第8行或第14行进一步转义,本地声明的变量double myVar
已经不再存在了,这种行为主要是正确的(并且“旧的”编译器发布在容忍有效范围溢出的多年期间,我们容忍一种危险的副作用习惯,所以现在是清理规则的最佳时机,以达到公平的C / S标准。
是的,MetaEditor会将MQL4代码正确编译为 .mq4
代码执行格式,这里没问题。甚至自动更新过程也开始独立于MT4终端平台(自动)更新(因此您经常会看到新的帮助文件出现并强制重新编译所有可见的本地主机 .MQ4
资产更新为 .EX4
格式,因此“不要惊慌。”
最好永远不要安装与Broker无关的MT4,总是去你的Broker's Support并获得安装包&来自您的经纪人的帮助。这是您在合同中签订的业务关系,因此请保留这些字符串,因为您要在根据设定条款和条款运营的表格上交易您的资金。条件。一些经纪人拥有平台定制的手段,因此他们的自定义设置可以与其服务器端自动化相匹配。
这更像是R& D努力的经济问题。 (可以在IDE编辑器MQL4帮助中阅读很多关于从MQL5域注入的语言组件)。这是产品设计策略的自然意志,而不是双线的双重努力。毫无疑问,帮助文件有许多细节可以改进和更好地维护,这里的常识是接受事实并重新学习新引入的功能对MQL4代码库保持中立以及新的东西可能实际上有助于一个很多方面,旧的编译器功能很短。
如果有人反对某些编译器/平台重新设计步骤不好,我会同意单线程,平台关键,可能阻塞,集中执行所有 CustomIndicator
-s只在一个SPoF线程中。
但是C'est La Vie,直到系统架构师不会审查这个SPoF,该平台仍然容易受到此功能的影响,但球在球场的另一边,并且必须在那里实施更改