外部和输入之间的区别 - 页 4

 
Igor Makanu:

声明一个枚举类型的 变量如何?

隐式枚举转换 tst1.mq5 24 17


你也可以检查EnumToString()...


我认为没有声明变量的类型只是在编译中被抛出,因为没有使用。

我的意思是,你可以不小心声明一个与已经在使用的枚举中相同名称的变量,然后有一个非常漫长和痛苦的时间来寻找我在哪里和哪里射中自己的膝盖。

 
Maksim Neimerik:
那么判决结果如何,先生们?如果我用.mqh(#include)写一个.mq5程序,我可以安全地写extern,而不用担心出现意想不到的后果(就像我在mql4中那样),或者使用input ?

在MT5中使用输入来声明外部变量。MT5中的Extern有一个不同的目的。

 
Dmitry Fedoseev:

在MT5中使用输入来声明外部变量。MT5中的Extern有一个不同的目的。

为什么在MT5中不能使用extern?- 我在MT5中编译了我的例子,我没有看到根本的区别

 
Igor Makanu:

为什么在MT5中不能使用extern?- 我在MT5中编译了我的例子,我没有看到任何根本的区别

因为人们出于习惯,从旧的MQL4开始,试图使用extern来输入参数。

而在新的MQL4和MQL5中,input与#property strict一起使用,extern则用于其他目的。

这就是为什么说不要使用extern。

 
Artyom Trishkin:

因为人们出于习惯,从古老的MQL4开始就尝试使用extern来输入参数。

而在新的MQL4和MQL5中,input与#property strict一起使用,extern则用于其他目的。

这就是为什么我告诉你不要使用extern。

因此,每个人都想写大量的bukuffs,结果是他们不应该只在MQL5中使用,也不应该在其他地方使用)))


好了,重要的论点来了,我认为--如果你在旧代码中看到extern,用input代替它,并修复所有的警告,愿MQL的力量跟随你!!!!。

 
Igor Makanu:

你看,每个人都试图写很多的bukuffs,最后却只在MT5中不使用,或者根本不在任何地方使用))))。


好了,重要的论点来了,我认为--如果你在旧代码中看到extern,用input代替它,并纠正所有的警告,愿MQL的力量与你同在!!!!。

我不明白这里写的很多东西。

但我的意思不是在MQL5和MQL4中使用extern与#property strict来声明程序的外部参数,而是用于帮助中描述的目的(含糊不清)。

 

我一直在想,只是一个想法......在MQL5中,使用iCustom()不是比在MQL4中更有问题吗(或一般在MQL4中使用指标调用)?是这样吗?如果是,那么我将继续。

我刚刚开始一点点学习MQL5...

我可能会启动一个新的主题。
 
Maksim Neimerik:
我只是在想...在MQL5中,使用iCustom()比在MQL4中(或一般在MQL4中调用指标)要困难得多,不是吗?是这样吗?如果是,那么我将继续。

没有更多的问题,只是在MQL5中,你必须分两步来处理iCustom()。

1.获得指示器手柄

2.通过CopyBuffer()请求指标缓冲区的值


在MQL4中--iCustom()作为一个带参数的函数调用工作--你调用它,接收它

在MQL5中也是如此 - 开发人员故意减少了内置函数的功能,使访问时间序列变得不方便 - 他们最近才在MQL5中增加了iClose()、iHigh(),之前他们需要像CopyBuffer()那样将数据复制到一个数组中。

一般来说,MT5比MT4有更多的写法

 
Igor Makanu:

没有更多的问题,只是在MQL5中,你必须分两步来处理iCustom()。

1.获得指示器手柄

2.通过CopyBuffer()请求指标缓冲区的值


在MQL4中--iCustom()作为一个带参数的函数调用工作--你调用它,接收它

在MQL5中也是如此 - 开发人员故意减少了内置函数的功能,使访问时间序列变得不方便 - 他们最近才在MQL5中增加了iClose()、iHigh(),之前他们需要像CopyBuffer()那样将数据复制到一个数组中。

一般来说,MT5比MT4有更多的写法

https://www.mql5.com/ru/forum/316800

MQL4 & MQL5
MQL4 & MQL5
  • 2019.06.29
  • www.mql5.com
Я тут вот что думаю, просто мысли... В MQL5 ведь намного проблемнее работа с iCustom() чем в MQL4 (да и вообще с вызовом индикаторов в советнике...
 

不幸的是,MQL5中的外部变量的实现还没有最终确定,这就是为什么我不建议使用它--它可能会引起问题。 我是指缺乏对这些变量的强制性一次性 初始化的控制。

例如,你可以这样写。

extern int a=1;
extern int a=2;

想象一下,这些初始化是在不同的插件中进行的。然后,最终的结果将取决于这些文件被包含的顺序。

或者我们可以像这样写(可执行文件)。

extern int a;

void OnStart() { Print(a); }

这里我们根本没有初始化这个外部变量,但也没有错误。

相应地,我们无法控制相同的变量是否在其他文件中被定义。 你可以不小心改变它的名字,但程序会像什么都没发生一样被编译,尽管在其他文件中我们有一个不同名字的变量。

总而言之,它不适合任何地方。这就是为什么最好使用函数而不是外部变量。 它们保证只有一个定义,不多也不少。