从头开始自学MQL5语言 - 页 44

 
Vladimir Simakov:

全局对象,用默认的构造函数进行初始化。对于原始类型(在我们的例子中,除字符串外的所有类型),它是0。 但对于在堆栈上分配的内存(读变量),它们是不初始化的。这就是为什么全局变量可能没有被初始化,记住在这种情况下它们将等于零。但是没有初始化(同时,要习惯于马上避免编译器产生的警告,除非你很清楚自己在做什么)是一个严重的问题,因为读取一个未初始化的变量会导致未定义行为。例如,这段代码在发布版和调试版中的行为是不同的,没有人能够保证当你改变编译器版本或优化设置时,它的行为也不会改变。

你好,弗拉基米尔!谢谢你的澄清。

真诚的,弗拉基米尔。

 
MrBrooklin:

Peter,关于全局变量 的问题,我还没有在文献中发现全局变量需要被预定义的说法。你是否有一个来源的链接,以提高你在这个问题上的知识?MQL5参考文献不包含 对初始化的明确参考

bool类型 设计用来存储逻辑值 truefalse ,其数字表示分别为1或0

例子。

bool a =true;
bool b =false;
bool c =1;

内部表示是一个1字节的整数。应该注意的是,在布尔表达式中,使用其他整数或实数类型或这些类型的表达式来代替布尔是可以接受的,而且编译器不会产生错误。在这种情况下,零将被解释为假,所有其他的值都是真。

问候,弗拉基米尔。
明确初始化全局变量是可取的,至少要习惯于这样做。同样,在mql4中你根本不能在函数中初始化变量和数组,但在mql5中你必须这样做,否则变量会有 "垃圾"。
 

我已经把它添加到脚本代码中。

//--- Зададим глобальные переменные:
//переменная enough_time (достаточно времени), где bool - логическое значение: истина (true) или ложь (false)
bool enough_time=false;
//переменная enough_patience (достаточно терпения), где bool - логическое значение: истина (true) или ложь (false)
bool enough_patience=false;

现在,在脚本的注释中,不知怎么的,一个一年级的编程学校的学生清楚地说明了为什么bool 数据类型 的预定义值应该正好是false 而不是true

问候,弗拉基米尔。

 
MrBrooklin:

在脚本代码中添加了它。

尊敬的弗拉基米尔。

我没有什么可抱怨的了。:)
 
MrBrooklin:

我继续学习MQL5编程语言,现在发布一个脚本的代码,这是本主题参与者的一项任务的延续。该脚本已在所有模式下进行了测试。没有发现任何问题。应用最小数量的输入参数来开始。脚本代码是用英语写的,代码的注释是用俄语写的,以方便学习。正如我先前所承诺的那样,我试图以一个编程学校一年级学生可以理解的方式来描述这个脚本。

最好的问候,弗拉基米尔。

弗拉基米尔,你不应该这样写。不要让函数在外部变量上的工作短路。到目前为止,对你来说唯一的例外是从输入变量 中取值。
 
Vasiliy Sokolov:
弗拉基米尔,你不应该这样写。不要锁定外部变量中的函数。到目前为止,对你来说唯一的例外是从输入变量 中取值。

你好,瓦西里!说实话,我不太明白黑体字的意思。请详细说明你的意思。

真诚的,弗拉基米尔。

 
MrBrooklin:

你好,瓦西里!说实话,我不太理解黑体字所写的意思。请详细说明你的意思。

真诚的,弗拉基米尔。

不要使用全局变量。我将在后面写到为什么不应该使用它们。
 
Vasiliy Sokolov:
不要使用全局变量为什么你不应该使用它们,我以后会写

关于这一点,有一个很好的轶事。

- 问题:C++中全局变量的最佳类型是什么?

- 答案://

 
Vasiliy Sokolov:
不要使用全局变量。我将在后面写出为什么不应该使用它们。

现在我明白了。谢谢你,我等着听你说为什么不能使用全局变量。

问候,弗拉基米尔。

 
在这个阶段,在向OOP编程过渡之前,使用全局变量是完全合理的,没有理由拒绝它们。它们很方便,可以在程序的任何地方使用。为什么不应该使用它们呢?我认为。