错误、漏洞、问题 - 页 312 1...305306307308309310311312313314315316317318319...3184 新评论 Rashid Umarov 2011.02.22 10:06 #3111 Academic:这个警告不应该被给出,因为ObjectGetDouble函数 传递了一个引用,if语句检查了两个调用返回的真值,因此只有当两个函数都返回真值时,这些变量才会被处理,这意味着两个变量不能不被设置为正确的值。 编译器并没有扩展它的思维,以确保这些变量一定会因为调用ObjectGetDouble 而被初始化。试着写你自己的变量吧,在这里,通过引用传递的输入参数的值将被明确地设置。编译器会怎么说? Academic 2011.02.22 10:11 #3112 Rosh: 编译器并没有充分扩展其思维,以确保这些变量一定会作为ObjectGetDouble 调用的结果而被初始化。试着写你自己的,通过引用传递的输入参数的值将被明确设置。编译器会怎么说? 拉希德,这根本就不是真正的 "意识",而是数学。 Slava 2011.02.22 10:19 #3113 Academic: 拉希德,这根本就不是真正的 "意识",而是数学。 1.有这样一种东西,即 "缩短逻辑表达式的 评估"。 2.编译器无法确定通过引用传入的变量是否会被填充。 3.警告只是一个警告,提醒你注意问题的可能性。 Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool www.mql5.com Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5 Rashid Umarov 2011.02.22 10:28 #3114 Academic:拉希德,这根本就不是真正的 "意识",而是数学。 好吧,让我们来定义这样一种融合bool AlwaysGood( double & param) { return true; } 这里是否能保证参数变量会被初始化? Academic 2011.02.22 10:35 #3115 Rosh:好吧,让我们来定义这样一个ffr函数 有没有保证参数变量会被初始化?这是一个结果 "param "不改变的函数。所以在这里应该发出1000%的警告:) 这里的标准解决方案是这样的:如果有一个不能改变值的代码执行分支,那么这个函数就被认为不能改变值。并且会产生一个警告。 拉希德,你想让我拿任何一个现代的C++和C语言编译器来编译这样的代码吗,我相信它们都不会给出一个左派的警告。此外,如果你在检测这种东西方面有这样的 "问题",你突然开始有一个非常强烈的怀疑,即根本不存在这样的优化。或者有吗? Slava 2011.02.22 10:49 #3116 Academic: 拉希德,你想让我拿任何一个现代的C++和C编译器来编译类似的代码,我相信它们都不会给出假的警告。 我们在争论什么呢? PS 肯定会有一个消息(也许下面有几行)。 Slava 2011.02.22 10:54 #3117 Academic: 这显然不是一种改进,特别是如果在检测这些东西方面存在这样的 "问题",那么一个巨大的疑问就会悄悄出现,即根本没有优化。或者有吗?ObjectGetDouble函数 超出了编译器的控制,因为它有一个独立的(即库)实现 Документация по MQL5: Графические объекты / ObjectGetDouble www.mql5.com Графические объекты / ObjectGetDouble - Документация по MQL5 Dmitriy Skub 2011.02.22 11:02 #3118 Academic: 如果你看一下ObjectGetDouble 的帮助。根据函数的成功,返回真或假。如果成功, 该属性的值将被放置在目标变量中,通过最后一个参数的引用传递。因此,我们的结论是,在出现任何错误的情况下,接收变量 的填充是无法保证的。这就是为什么编译器的信息 是有效的。IMHO。 Sergey Chalyshev 2011.02.22 11:10 #3119 在最新的构建中,有些东西不同步。做了一个小的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 一切正常!它只有助于重新启动终端。 Slava 2011.02.22 11:11 #3120 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 一切正常! 它只有助于重新启动终端。 对不起。今天或明天将发布一个没有这个不幸错误的新版本。 1...305306307308309310311312313314315316317318319...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这个警告不应该被给出,因为ObjectGetDouble函数 传递了一个引用,if语句检查了两个调用返回的真值,因此只有当两个函数都返回真值时,这些变量才会被处理,这意味着两个变量不能不被设置为正确的值。
编译器并没有充分扩展其思维,以确保这些变量一定会作为ObjectGetDouble 调用的结果而被初始化。试着写你自己的,通过引用传递的输入参数的值将被明确设置。编译器会怎么说?
拉希德,这根本就不是真正的 "意识",而是数学。
拉希德,这根本就不是真正的 "意识",而是数学。
1.有这样一种东西,即 "缩短逻辑表达式的 评估"。
2.编译器无法确定通过引用传入的变量是否会被填充。
3.警告只是一个警告,提醒你注意问题的可能性。
拉希德,这根本就不是真正的 "意识",而是数学。
好吧,让我们来定义这样一种融合
这里是否能保证参数变量会被初始化?好吧,让我们来定义这样一个ffr函数
有没有保证参数变量会被初始化?这是一个结果 "param "不改变的函数。所以在这里应该发出1000%的警告:)
这里的标准解决方案是这样的:如果有一个不能改变值的代码执行分支,那么这个函数就被认为不能改变值。并且会产生一个警告。
拉希德,你想让我拿任何一个现代的C++和C语言编译器来编译这样的代码吗,我相信它们都不会给出一个左派的警告。
此外,如果你在检测这种东西方面有这样的 "问题",你突然开始有一个非常强烈的怀疑,即根本不存在这样的优化。或者有吗?
拉希德,你想让我拿任何一个现代的C++和C编译器来编译类似的代码,我相信它们都不会给出假的警告。
我们在争论什么呢?
PS 肯定会有一个消息(也许下面有几行)。
这显然不是一种改进,特别是如果在检测这些东西方面存在这样的 "问题",那么一个巨大的疑问就会悄悄出现,即根本没有优化。或者有吗?
如果你看一下ObjectGetDouble 的帮助。
根据函数的成功,返回真或假。如果成功, 该属性的值将被放置在目标变量中,通过最后一个参数的引用传递。
因此,我们的结论是,在出现任何错误的情况下,接收变量 的填充是无法保证的。这就是为什么编译器的信息 是有效的。
IMHO。
在最新的构建中,有些东西不同步。
做了一个小的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 一切正常!
它只有助于重新启动终端。
在最新的构建中,有些东西不同步。
做了一个小的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 一切正常!
它只有助于重新启动终端。