错误、漏洞、问题 - 页 312

 
Academic:

这个警告不应该被给出,因为ObjectGetDouble函数 传递了一个引用,if语句检查了两个调用返回的真值,因此只有当两个函数都返回真值时,这些变量才会被处理,这意味着两个变量不能不被设置为正确的值。


编译器并没有扩展它的思维,以确保这些变量一定会因为调用ObjectGetDouble 而被初始化。试着写你自己的变量吧,在这里,通过引用传递的输入参数的值将被明确地设置。编译器会怎么说?
 
Rosh:
编译器并没有充分扩展其思维,以确保这些变量一定会作为ObjectGetDouble 调用的结果而被初始化。试着写你自己的,通过引用传递的输入参数的值将被明确设置。编译器会怎么说?


拉希德,这根本就不是真正的 "意识",而是数学。

 
Academic:


拉希德,这根本就不是真正的 "意识",而是数学。

1.有这样一种东西,即 "缩短逻辑表达式的 评估"。

2.编译器无法确定通过引用传入的变量是否会被填充。

3.警告只是一个警告,提醒你注意问题的可能性。

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
Academic:


拉希德,这根本就不是真正的 "意识",而是数学。

好吧,让我们来定义这样一种融合

bool AlwaysGood( double & param)
  {
   return true;
  }
这里是否能保证参数变量会被初始化?
 
Rosh:

好吧,让我们来定义这样一个ffr函数

有没有保证参数变量会被初始化?

这是一个结果 "param "不改变的函数。所以在这里应该发出1000%的警告:)

这里的标准解决方案是这样的:如果有一个不能改变值的代码执行分支,那么这个函数就被认为不能改变值。并且会产生一个警告。

拉希德,你想让我拿任何一个现代的C++和C语言编译器来编译这样的代码吗,我相信它们都不会给出一个左派的警告。

此外,如果你在检测这种东西方面有这样的 "问题",你突然开始有一个非常强烈的怀疑,即根本不存在这样的优化。或者有吗?

 
Academic:

拉希德,你想让我拿任何一个现代的C++和C编译器来编译类似的代码,我相信它们都不会给出假的警告。

我们在争论什么呢?

PS 肯定会有一个消息(也许下面有几行)。

 
Academic:

这显然不是一种改进,特别是如果在检测这些东西方面存在这样的 "问题",那么一个巨大的疑问就会悄悄出现,即根本没有优化。或者有吗?

ObjectGetDouble函数 超出了编译器的控制,因为它有一个独立的(即库)实现
Документация по MQL5: Графические объекты / ObjectGetDouble
Документация по MQL5: Графические объекты / ObjectGetDouble
  • www.mql5.com
Графические объекты / ObjectGetDouble - Документация по MQL5
 
Academic:


如果你看一下ObjectGetDouble 的帮助。


根据函数的成功,返回真或假。如果成功, 该属性的值将被放置在目标变量中,通过最后一个参数的引用传递。


因此,我们的结论是,在出现任何错误的情况下,接收变量 的填充是无法保证的。这就是为什么编译器的信息 是有效的。

IMHO。

 

在最新的构建中,有些东西不同步。

做了一个小的EA。

int OnInit()
  {
   Print("Все нормально!"); 
   return(0);
  }

运行测试器。

2011.02.22 11:54:21 Core 1 2011.02.07 00:00:00 一切正常!

我对我的EA进行了修改。

int OnInit()
  {
   Print("Тестер, Аууу, ты где?"); 
   return(0);
  }

我编译了它,运行测试器,它有反应。

2011.02.22 11:57:55 Core 1 2011.02.07 00:00:00 一切正常!

它只有助于重新启动终端。

 
Serj_Che:

在最新的构建中,有些东西不同步。

做了一个小的EA。

运行测试器。

2011.02.22 11:54:21 Core 1 2011.02.07 00:00:00 一切正常!

我对我的EA进行了修改。

我编译了它,运行测试器,它有反应。

2011.02.22 11:57:55 Core 1 2011.02.07 00:00:00 一切正常!

它只有助于重新启动终端。

对不起。今天或明天将发布一个没有这个不幸错误的新版本。