Ошибки, баги, вопросы - страница 2761

 
Aleksey Mavrin:

0хFF наверное в 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 OnTick function (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) Все ZExtLevel проверял, чтобы в них не было 0.


 
Igor Makanu:

нет, но инициализирует правильно

Почему уверены что нет? По умолчанию в интегер представляет. 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);

тоже будет предупреждение

да понятно это все и было изначально

тут вопрос в другом, вот где так уж нужен char?

а uchar я использую в StringToCharArray() и а CryptEncode() и если пройтись по справке еще найдутся

так вот почему проинициализировать массив char я могу используя ArrayInitialize ,а а вот uchar не могу


ладно холивар знатный получился, сомневаюсь что что то изменится ;)


PS: 0xFF = 255 (1 байт )

 
Igor Makanu:

yes it’s clear that was all from the beginning

here the question is different, this is where char is really needed?

I use uchar in StringToCharArray () and CryptEncode (), and if you go through the help there are still

so that's why i can initialize a char array using ArrayInitialize , but uchar can't


ok, the noble holivar turned out, I doubt that something will change;)


PS: 0xFF = 255 (1 byte)

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

да понятно это все и было изначально

тут вопрос в другом, вот где так уж нужен char?

а uchar я использую в StringToCharArray() и а CryptEncode() и если пройтись по справке еще найдутся

так вот почему проинициализировать массив char я могу используя ArrayInitialize ,а а вот uchar не могу

ладно холивар знатный получился, сомневаюсь что что то изменится ;)

PS: 0xFF = 255 (1 байт )

Не понял почему вы не можете. с uchar всё также как с char работает.

Вы изначально же спрашивали почему предупреждение, потому что 4 байта в 1. А значение 255 не важно совсем. и 0 и единица могут быть и 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

OK, работает без предупреждений компилятора

Спасибо

Причина обращения: