初学者的问题 MQL5 MT5 MetaTrader 5 - 页 495 1...488489490491492493494495496497498499500501502...1503 新评论 Aleksey Vyazmikin 2016.01.13 14:37 #4941 关于第一种情况已经解决了--放在括号里的两个比较,它不发誓--是否有一个逻辑错误--即比较的结果可以被替换,因为 "或"?第二种表达方式仍有一个开放性问题--那里有什么问题--有什么想法吗? Alexey Viktorov 2016.01.13 14:50 #4942 -Aleks-:第一种情况已经解决了--把两个比较结果放在括号里,它并不发誓--是否存在一个逻辑错误--即比较结果可以因为 "或 "而被替换?关于第二种表达方式仍有一个未决问题--那里有什么问题--有什么想法吗?记住,在新的mql4中对一个条件的检查并没有完全执行。即在条件 if(Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy)如果Low[x]不大于PriceBuy,那么将不进行进一步检查。这就是错误描述告诉我们的内容。相应地,如果第一对条件被括在括号内,第二对条件如果失败,将被检查。第二个问题。for(calc_day;calc_day>0; calc_day--)calc_day等于什么?可以小于零吗?编译器不知道逻辑中的内容...这就是为什么它警告说可能出现无效的循环。 Aleksey Vyazmikin 2016.01.13 14:56 #4943 Alexey Viktorov:记住,新的mql4中的条件检查并没有完全执行。即,在条件 if(Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy)如果Low[x]不大于PriceBuy,将不进行进一步检查。这就是错误描述告诉我们的内容。相应地,如果第一对条件被括在括号内,第二对条件如果失败,将被检查。谢谢你的答复惊讶--因为在视觉上,这个逻辑一直在正常工作,嗯......。阿列克谢-维克多罗夫。第二个问题。for(calc_day;calc_day>0; calc_day--)calc_day等于什么?可以小于零吗?编译器不知道逻辑中的内容...这就是为什么它警告说可能出现无效的循环。 数字calc_day总是大于0,其他数值时代码不被调用。 Alexey Viktorov 2016.01.13 15:09 #4944 -Aleks-:谢谢你的答复惊讶--因为在视觉上,这个逻辑一直在正常工作,嗯......。在6**构建之前是这样的,检查了整个条件链,一切正常,但现在一切都变了。而在旧的构建中,这种情况下条件是模糊的。它是如何设计的?if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )或者是这样?if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)一个人的大脑可以搞清楚,但一个编译器该怎么做?它没有大脑。-Aleks-。 数字calc_day总是大于0,其他数值不会导致代码被调用。告诉编译器... Aleksey Vyazmikin 2016.01.13 18:32 #4945 Alexey Viktorov:直到构建6**都是如此,整个条件链都被检查过,一切都在工作,但现在一切都变了。而在旧的建筑中,这种情况下的条件也是模糊不清的。它是如何设计的?if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )或者是这样吗?if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)一个人的大脑可以搞清楚,但一个编译器该怎么做?他没有大脑...告诉编译器...令人信服 - 我会更加警惕。我如何告诉编译器?写吧,但它能理解吗?if (calc_day<0) calc_day=calc_day*(-1); [删除] 2016.01.13 18:39 #4946 Alexey Viktorov:在6**构建之前是这样的,整个条件链都被检查过了,一切都正常,但现在一切都变了。是的,在这种情况下,在旧的建设中,条件是模糊的。它是如何设计的?if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )或者是吗?if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)一个人的大脑可以搞清楚,但一个编译器该怎么做?他没有大脑...告诉编译器...检查运算符的优先级是否可能出错;使用括号来澄清优先级 --这不是一个错误。 这是一个警告。它出现在旧代码中。他们是为用户而不是为编译器添加的。编译器以操作优先级 为指导。那里一切都很清楚。&&的优先级高于||的优先级。 这就是为什么括号应该这样排列的原因if( (Low[X]>PriceBuy &&High[X]>PriceBuy) || ( Low[X]<PriceBuy &&High[X]<PriceBuy) )更新:在这种情况下,MT4和MT5的优先级是一样的。 [删除] 2016.01.13 18:43 #4947 -Aleks-:令人信服 - 我会更加警惕。我如何告诉编译器?写吧,但它能理解吗?if (calc_day<0) calc_day=calc_day*(-1);for( calc_day = 365; calc_day > 0; calc_day --) 那就试试吧。 Alexey Viktorov 2016.01.13 19:22 #4948 Alexey Kozitsyn:检查运算符的优先级是否可能出错;使用括号来澄清优先级 --这不是一个错误。 这是一个警告。它出现在旧代码中。我们是为用户而不是为编译器添加的。编译器以操作优先级 为指导。那里一切都很清楚。&&的优先级高于||的优先级。 这就是为什么括号应该这样排列的原因if( (Low[X]>PriceBuy &&High[X]>PriceBuy) || ( Low[X]<PriceBuy &&High[X]<PriceBuy) )更新:在这种情况下,MT4和MT5的优先级是一样的。从本质上讲,是的,警告不是一个错误。但如果( Low[X]>PriceBuy &&High[X]>PriceBuy || Low[X]<PriceBuy &&High[X]<PriceBuy ),初始变量将如何工作?还是说放几个支架就很无奈了? Artyom Trishkin 2016.01.13 19:49 #4949 -Aleks-:令人信服 - 我会更加警惕。我如何告诉编译器?写吧,但它能理解吗?if (calc_day<0) calc_day=calc_day*(-1);for(int i=calc_day; i>0; i--) {} [删除] 2016.01.14 03:23 #4950 Alexey Viktorov:嗯,从本质上讲,是的,警告不是错误。但如果( Low[X]>PriceBuy &&High[X]>PriceBuy || Low[X]<PriceBuy &&High[X]<PriceBuy ),初始变量将如何工作?还是会因为放了几个托架而失败?它将按照我上面写的方式工作。编译器警告用户不要偷懒,放上括号以避免可能的非明显错误。 1...488489490491492493494495496497498499500501502...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
关于第一种情况已经解决了--放在括号里的两个比较,它不发誓--是否有一个逻辑错误--即比较的结果可以被替换,因为 "或"?
第二种表达方式仍有一个开放性问题--那里有什么问题--有什么想法吗?
第一种情况已经解决了--把两个比较结果放在括号里,它并不发誓--是否存在一个逻辑错误--即比较结果可以因为 "或 "而被替换?
关于第二种表达方式仍有一个未决问题--那里有什么问题--有什么想法吗?
记住,在新的mql4中对一个条件的检查并没有完全执行。即在条件
if(Low[X]>PriceBuy && High[X]>PriceBuy ||
Low[X]<PriceBuy && High[X]<PriceBuy)
如果Low[x]不大于PriceBuy,那么将不进行进一步检查。这就是错误描述告诉我们的内容。相应地,如果第一对条件被括在括号内,第二对条件如果失败,将被检查。
第二个问题。
for(calc_day;calc_day>0; calc_day--)
calc_day等于什么?可以小于零吗?编译器不知道逻辑中的内容...这就是为什么它警告说可能出现无效的循环。
记住,新的mql4中的条件检查并没有完全执行。即,在条件
if(Low[X]>PriceBuy && High[X]>PriceBuy ||
Low[X]<PriceBuy && High[X]<PriceBuy)
如果Low[x]不大于PriceBuy,将不进行进一步检查。这就是错误描述告诉我们的内容。相应地,如果第一对条件被括在括号内,第二对条件如果失败,将被检查。
谢谢你的答复
惊讶--因为在视觉上,这个逻辑一直在正常工作,嗯......。
第二个问题。
for(calc_day;calc_day>0; calc_day--)
calc_day等于什么?可以小于零吗?编译器不知道逻辑中的内容...这就是为什么它警告说可能出现无效的循环。
谢谢你的答复
惊讶--因为在视觉上,这个逻辑一直在正常工作,嗯......。
在6**构建之前是这样的,检查了整个条件链,一切正常,但现在一切都变了。而在旧的构建中,这种情况下条件是模糊的。它是如何设计的?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
或者是这样?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
一个人的大脑可以搞清楚,但一个编译器该怎么做?它没有大脑。
-Aleks-。
数字calc_day总是大于0,其他数值不会导致代码被调用。告诉编译器...
直到构建6**都是如此,整个条件链都被检查过,一切都在工作,但现在一切都变了。而在旧的建筑中,这种情况下的条件也是模糊不清的。它是如何设计的?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
或者是这样吗?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
一个人的大脑可以搞清楚,但一个编译器该怎么做?他没有大脑...
告诉编译器...
令人信服 - 我会更加警惕。
我如何告诉编译器?写吧,但它能理解吗?
if (calc_day<0) calc_day=calc_day*(-1);
在6**构建之前是这样的,整个条件链都被检查过了,一切都正常,但现在一切都变了。是的,在这种情况下,在旧的建设中,条件是模糊的。它是如何设计的?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
或者是吗?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
一个人的大脑可以搞清楚,但一个编译器该怎么做?他没有大脑...
告诉编译器...
检查运算符的优先级是否可能出错;使用括号来澄清优先级 --这不是一个错误。 这是一个警告。它出现在旧代码中。
他们是为用户而不是为编译器添加的。编译器以操作优先级 为指导。那里一切都很清楚。&&的优先级高于||的优先级。 这就是为什么括号应该这样排列的原因
if( (Low[X]>PriceBuy &&High[X]>PriceBuy) || ( Low[X]<PriceBuy &&High[X]<PriceBuy) )
更新:在这种情况下,MT4和MT5的优先级是一样的。
令人信服 - 我会更加警惕。
我如何告诉编译器?写吧,但它能理解吗?
if (calc_day<0) calc_day=calc_day*(-1);
检查运算符的优先级是否可能出错;使用括号来澄清优先级 --这不是一个错误。 这是一个警告。它出现在旧代码中。
我们是为用户而不是为编译器添加的。编译器以操作优先级 为指导。那里一切都很清楚。&&的优先级高于||的优先级。 这就是为什么括号应该这样排列的原因
if( (Low[X]>PriceBuy &&High[X]>PriceBuy) || ( Low[X]<PriceBuy &&High[X]<PriceBuy) )
更新:在这种情况下,MT4和MT5的优先级是一样的。
从本质上讲,是的,警告不是一个错误。但如果( Low[X]>PriceBuy &&High[X]>PriceBuy || Low[X]<PriceBuy &&High[X]<PriceBuy ),初始变量将如何工作?还是说放几个支架就很无奈了?
令人信服 - 我会更加警惕。
我如何告诉编译器?写吧,但它能理解吗?
if (calc_day<0) calc_day=calc_day*(-1);
嗯,从本质上讲,是的,警告不是错误。但如果( Low[X]>PriceBuy &&High[X]>PriceBuy || Low[X]<PriceBuy &&High[X]<PriceBuy ),初始变量将如何工作?还是会因为放了几个托架而失败?
它将按照我上面写的方式工作。
编译器警告用户不要偷懒,放上括号以避免可能的非明显错误。