错误、漏洞、问题 - 页 2761

 
Aleksey Mavrin:

0xFF可能被编译器变成了4个字节。

没有,但它的初始化是正确的

uchar uc[16];
ArrayInitialize(uc,(uchar)0xFF); // truncation of constant value        
ArrayPrint(uc);                  //     255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
 

下午好,请告知如何解决这个问题。

在优化过程中,弹出了一个错误。

2020.05.31 15:05:32.738 Core 7 genetic pass (0, 53) tested with error "critical runtime error 503 in OnTickfunction(zero divide, module Experts\e1.ex5, file e1.mq5, line 826, col 73) " in 0:00:00.153

double Mix1 = NormalizeDouble((MathAbs(ZExtLevel[0] - ZExtLevel[1]), 2)

double Mix2 = NormalizeDouble((MathAbs(ZExtLevel[1] - ZExtLevel[2])), 2)。

double Mix = NormalizeDouble((Mix1/Mix2),2)。

我做了什么。

1)我将Mix1和Mix2相乘,以减少小数点后的数字。

2)改变了归一化中的数字数量。

3) 检查了所有的ZExtLevels,确保它们不包含0。


 
Igor Makanu:

没有,但它初始化正确

为什么你确定它没有?默认情况下,在Integer中,它呈现的是。sizeof这样说。

 
Aleksey Mavrin:

为什么你确定它没有?整数中的默认值是呈现。sizeof说它是。

准确地说,是uint。

 
Aleksey Mavrin:

为什么你确定它没有?整数中的默认值是呈现。sizeof这样说。


它是否也能在没有任何警告的情况下工作?

char c[16];
ArrayInitialize(c, 127);

因为有一个相应的签名ArrayInitialize

int  ArrayInitialize(
   char    array[],     // инициализируемый массив
   char    value        // значение, которое будет установлено
   );

而且由于某些未知的原因,他们没有为无符号的Uchar创建ArrayInitialize()。

 
Igor Makanu:

工作方式一样,没有任何警告?

因为有一个相应的签名ArrayInitialize

而对于无符号的Uchar,他们没有做ArrayInitialize(),原因不明。

这不是关于签名或没有签名的问题。问题是,4个字节被转换为1,理论上会丢失信息--这就是编译器警告的内容。

尝试ArrayInitialize(c, (char)10000)。

还会有一个警告

 
Aleksey Mavrin:

这不是关于签名或没有签名的问题。问题是,4个字节被转换为1,理论上会丢失信息,这就是编译器警告的内容。

尝试ArrayInitialize(c, (char)10000)。

还会有一个警告

嗯,从一开始就很清楚

问题在这里以不同的方式出现了--你在哪里真正需要图表?

我在StringToCharArray()和CryptEncode()中使用了Uchar,如果你翻看帮助,你会发现更多的内容

这就是为什么我可以用ArrayInitialize 来初始化一个char数组,但Uchar我却做不到。


好吧,这是一个伟大的喧嚣,我怀疑它将改变;)


PS: 0xFF = 255 (1个字节)

 
Igor Makanu:

是的,很明显,这一切都是从头开始的。

这里的问题是不同的,这就是真正需要慈善的地方?

我在StringToCharArray()和CryptEncode()中使用了Uchar,如果你浏览一下帮助,仍然有

所以这就是为什么我可以用ArrayInitialize 来初始化char数组,而ugar却不能。


好了,高贵的霍利瓦尔变成了,我怀疑有些东西会改变;)


PS: 0xFF = 255 (1个字节)

ArrayInitialize (uc,(char) 0xFF ); // truncation of constant value        
 
Igor Makanu:

是的,这就是它从一开始的目的。

这里还有一个问题,你真正需要的是哪里的炭?

我在StringToCharArray()和CryptEncode()中使用Uchar。

这就是为什么我可以用ArrayInitialize 来初始化一个char数组,但Uchar我 却做不到

好吧,这是一个伟大的喧嚣,我怀疑它将改变;)

PS: 0xFF = 255 (1个字节)

我不知道为什么你不能这样做。Uchar的工作方式与char相同。

你问为什么你得到了警告,因为1中有4个字节。 255并不重要,0和1可以是1和2,4和8个字节)

 

Alain Verleyen:

ArrayInitialize (uc,(char) 0xFF );

检查了。

uchar uc[16];
ArrayInitialize (uc, (char) 0xFF );
ArrayPrint(uc); 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

好了,在没有任何编译器警告 的情况下工作

谢谢你

原因: