错误、漏洞、问题 - 页 168

 
Manov:

你有"可能使用了未初始化的变量'local_low'"。

它说的是什么,如果

如果该变量被初始化为任何东西,警告就会消失。但正如你自己所看到的,在这个代码片段中初始化'local_low'变量 是不必要的。所以警告根本不影响生活。
 
Renat:

从一个已经将许多软件项目推向市场的软件公司经理的角度重新阅读我的答案。

否则,停留在 "任何程序员 "的水平上,你将不明白错误是什么。

:)由于我永远不会成为一家软件公司的负责人,我将永远停留在 "任何程序员 "的水平上(即在我的理解中,一个业余程序员)。

......由于业余程序员从来没有得到过错误的逻辑描述,他的结论是:要么他的那点代码根本就没有错误,要么错误非常复杂,没有人能够用逻辑语言描述它。在这一点上,我们可以认为,双方都理解对方,问题就结束了。

 
Yedelkin:
如果该变量被初始化为任何东西,警告就会消失。但是,正如你自己所看到的,在这段代码中初始化变量local_low是多余的。所以警告根本不影响生活。
一个具体的代码可能是肯定的。但编译器必须尽可能做到"万无一失"。
 
于是,监控员火冒三丈,告诉程序员:永远不要把初始化隐藏在条件后面,永远不要在循环体后使用循环变量,检查除以零,不要不必要地乘以实体,不要写if(a==true)......
 
Manov:
...编译器必须尽可能做到"万无一失"。
我不是在争论这个问题。这是一个有用的警告。这些警告越多,你就越能理解自己的代码。
 
Vigor:
......不写如果(a==true)......。

顺便说一下,在春天,我曾训练过专家顾问,在阅读了大量文献后,我在其中插入了if(a)类型的条件。但只有在我把这些条件改为if(a==true)这样的条件后,专家们才开始工作。现在我几乎无法摆脱这个习惯。
 
Yedelkin:

但是由于在第8行初始化变量local_low之后,在第9行使用了bool-variable interrupcion,结果发现在第15行,变量local_low将被保证 初始化。所以在这一点上,警告 "可能使用未初始化的变量'local_low'"并不意味着 "保证",而只是可能 存在一个传递分支,其中的变量是未初始化的。
在你的例子中,如果Ac-k=0,for操作符 根本不会被执行,local_low将被保证未被初始化。还是错了?
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Основы языка / Операторы / Оператор цикла for - Документация по MQL5
 

如果我们用相同的止损点发送修改仓位的请求,我们会得到一个错误。但如果你发送一个修改具有相同参数的挂单 的请求,该请求将被执行。这就是我们计划的方式,我们不需要检查参数是否有变化?

为什么要用不必要的请求来堵塞服务器,例如,在专家顾问出现错误或其操作逻辑不正确的情况下?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Valmars:
在你的例子中,如果Ac-k=0 ,那么for语句 根本就不会被执行,并且保证local_low不会被初始化。还是错了?

这是完全正确的。如果Ac-k<=1,for操作符根本不能被执行,并且保证local_low变量保持未初始化状态。但由于布尔变量interrupcion将保持为假(第3行),根据第13行的条件,未初始化的变量local_low将永远不会(应该永远不会)被 用于计算。特别是,第15行中带有变量local_low的表达式不应该被评估[当然,除非if语句完全按照帮助中所说的那样工作:] 。].

换句话说,如果变量local_low被保证为未初始化,它也被保证不会(不应该)被用于计算。

 

void Graf(
)
{
if(ObjectFind(0, "H")<0) ObjectCreate(0, "H",OBJ_HLINE
,0,0,h,0);
if(ObjectFind(0, "L")<0) ObjectCreate(0, "L",OBJ_HLINE,0,0,l,0)
; ObjectSetDouble(0, "H",OBJPROP_PRICE,h)
; ObjectSetDouble(0, "L",OBJPROP_PRICE,l)
string bal = DoubleToString(AccountInfoDouble(ACCOUNT_BALANCE),2)
。string equ = DoubleToString (AccountInfoDouble(ACCOUNT_EQUITY),2
)
; string spread = DoubleToString((Ask-Bid)/_Point),0)
; string space = ""
; string info= bal+space+equ+space+spread
;
if (ObjectFind(0, "info")<0) ObjectCreate(0, "info",OBJ_LABEL,0,0,0)
; ObjectSetInteger(0, "info",OBJPROP_XDISTANCE,0)
;ObjectSetInteger(0, "info",OBJPROP_YDISTANCE,15)
; ObjectSetString(0, "info",OBJPROP_TEXT,info)
;ObjectSetInteger(0, "info",OBJPROP_FONTSIZE,36)
; ObjectSetInteger(0, "info",OBJPROP_COLOR,Maroon)
; return
; }

下面是一段代码。该函数在每个tick上打印余额、股票和价差值。但是,由于某些原因,信息显示出来了,而不是之前的勾。请帮助我理解为什么?在MT4中,类似的代码在每一个新的tick点都会改变数值,而在MT5中,新的tick点会显示上一个tick点的信息。