错误、漏洞、问题 - 页 127

 
xeon:
编译器不会把没有第二个等号作为一个错误来检测。

它不需要,你的代码不包含错误。

int a = 0;
if(a=1){Print("TEST");}

并与此代码相同。

int a = 0;
a=1;
if(a){Print("TEST");}
 
xeon:
编译器不会将没有第二个等号检测为错误。
for(int i=0;i<total_deal;i++)
        {
         //--- try to get deals ticket
         if(ticket=HistoryDealGetTicket(i)) // Предупреждение к этой строке
           {
            Deal.Ticket(ticket);

但它给出了一个警告,至少对我的代码是这样的。

'DealInfo.mqh' DealInfo.mqh 1 1
表达式不是布尔值 Shou History.mq5 60 19
0个错误(s), 1个警告(s) 1 1
 
Urain:

它不需要,你的代码不包含错误。

并与这段代码完全相同。


而徒劳的是,例如,工作室检测到这个代码是一个错误。

此外,那么似乎这个代码

int a = 0;
a=1;
if(a){Print("TEST");}

与此相同。

int a = 19;
if(a=14){Print("TEST");}

假设0=假,1=真,那么其他数字等于什么?2,3,4, ......:-)

我认为这种方法不会带来任何好处,只会增加不必要的可能性,让人看不清错误。

 
xeon:

我认为,这种方法没有任何好处,它只是增加了一个查看错误的额外机会。

添加一个非布尔值的原因是为了让用户可以看到他们正在做什么。

 

如果我在终端(在图表上)保存这组数据,然后在测试器或终端中打开它,一切都很好。但如果我在测试器中保存它,然后在终端中打开它,所有非字符串类型的变量的值都显示为abracadabra。如果我点击 "确定",那么当我再次打开参数窗口时,它看起来很好,所有的参数都会被正确地替换成新的参数,除了布尔型参数。所有的东西都变成了假的......。在测试器中,从测试器中保存的套装可以正确打开。

 

很抱歉,我之前写的那个bug还没有被修复,很烦人。当运行 CopySpread 函数描述中给出的指标 ,点差历史被画上了一个洞 该孔总是覆盖从终端开始到指标开始的这段时间。似乎来自服务器的每个新刻度的点差都没有记录在点差历史中。 谢谢你!

 

我得到了编译器的警告。

隐式枚举转换
由于类型转换而可能造成的数据损失

当使用这个字符串时。

ENUM_POSITION_TYPE posType=PositionGetInteger(POSITION_TYPE);

这里有什么问题吗?

我发现:你应该用长

long posType=PositionGetInteger(POSITION_TYPE);

然后是另一个问题。这种结构是否能正确工作

if(posType==POSITION_TYPE_BUY)

当posType被定义为long?

 
ENUM_POSITION_TYPE posType=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
 
gpwr:

我得到了编译器的警告。

隐式枚举转换
由于类型转换而可能造成的数据损失

当使用这个字符串时。

这里有什么问题吗?

我发现:你应该用长

然后是另一个问题。这种结构是否能正确工作

当posType被定义为long?

可以工作,这是一个类型转换警告,你可以忽略它。
 
AlexinSergey:

很抱歉,我之前写的那个bug还没有被修复,很烦人。当运行 CopySpread 函数描述中给出的指标 ,点差历史被画上了一个洞 该孔总是覆盖从终端启动到指标启动的时间。似乎来自服务器的每个新刻度的点差都没有记录在点差历史中。 谢谢你!

谢谢,我们会处理好这个例子的。