Fehler, Irrtümer, Fragen - Seite 2761

 
Aleksey Mavrin:

0xFF wird wahrscheinlich vom Compiler in 4 Bytes umgewandelt.

nein, aber er wird korrekt initialisiert

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
 

Guten Tag, bitte teilen Sie mir mit, wie ich das Problem lösen kann:

Während der Optimierung tritt ein Fehler auf:

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);

Was ich getan habe:

1) Ich habe Mix1 und Mix2 multipliziert, um die Anzahl der Dezimalstellen zu verringern;

2) geänderte Anzahl der Ziffern bei der Normalisierung;

3) Alle ZExtLevels wurden überprüft, um sicherzustellen, dass sie nicht 0 enthalten.


 
Igor Makanu:

Nein, aber es wird korrekt initialisiert

Warum sind Sie sicher, dass es nicht so ist? Standardmäßig wird in Integer präsentiert. sizeof sagt dies.

 
Aleksey Mavrin:

Warum sind Sie sicher, dass es nicht so ist? Der Standardwert in Integer ist present. sizeof sagt, dass es das tut.

uint, um genau zu sein.

 
Aleksey Mavrin:

Warum sind Sie sicher, dass es nicht so ist? Der Standardwert in Integer ist present. sizeof sagt dies.


funktioniert es auch ohne Warnungen?

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

Weil es eine entsprechende SignaturArrayInitialize gibt

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

und aus irgendeinem unbekannten Grund haben sie ArrayInitialize() für unsigned uchar nicht erstellt

 
Igor Makanu:

auf dieselbe Weise und ohne Warnungen funktioniert?

weil es eine entsprechende Signatur ArrayInitialize gibt

und für ein unsigned uchar wurde aus unbekannten Gründen kein ArrayInitialize() ausgeführt.

Es geht nicht um die Unterschrift oder das Fehlen einer Unterschrift. Der Punkt ist, dass 4 Bytes in 1 umgewandelt werden und theoretisch Informationen verloren gehen können - davor warnt der Compiler.

Versuchen SieArrayInitialize(c, (char)10000);

es wird auch eine Warnung geben

 
Aleksey Mavrin:

Es geht nicht um die Unterschrift oder ihr Fehlen. Der Punkt ist, dass 4 Bytes in 1 umgewandelt werden und theoretisch Informationen verloren gehen können, wovor der Compiler warnt.

Versuchen SieArrayInitialize(c, (char)10000);

es wird auch eine Warnung geben

Nun, es war von Anfang an klar

Die Frage ist hier anders gelagert: Wo brauchen Sie wirklich Holzkohle?

Ich verwende uchar in StringToCharArray() und CryptEncode() und wenn Sie in der Hilfe nachsehen, finden Sie weitere

Das ist der Grund, warum ich ein char-Array mit ArrayInitialize initialisieren kann, aber uchar kann ich es nicht tun


ok, das ist ein großes Tohuwabohu, ich bezweifle, dass es sich ändern wird ;)


PS: 0xFF = 255 (1 Byte)

 
Igor Makanu:

ja, es ist klar, dass das alles von Anfang an so war

Hier stellt sich eine andere Frage: Braucht man hier wirklich Holzkohle?

Ich verwende uchar in StringToCharArray () und CryptEncode (), und wenn Sie durch die Hilfe gehen, gibt es noch

deshalb kann ich ein char-Array mit ArrayInitialize initialisieren, aber uchar kann nicht


ok, die edle holivar stellte sich heraus, ich bezweifle, dass etwas ändern wird;)


PS: 0xFF = 255 (1 Byte)

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

Ja, darum ging es von Anfang an.

Und noch eine Frage: Wo brauchen Sie wirklich Saibling?

Ich verwende uchar in StringToCharArray() und CryptEncode().

Das ist der Grund, warum ich ein char-Array mit ArrayInitialize initialisieren kann, aber uchar kann ich esnicht tun

ok, das ist ein großes Tohuwabohu, ich bezweifle, dass es sich ändern wird ;)

PS: 0xFF = 255 (1 Byte)

Ich weiß nicht, warum das nicht geht. uchar funktioniert auf die gleiche Weise wie char.

Sie haben gefragt, warum Sie die Warnung erhalten haben, weil 4 Bytes in 1. 255 ist nicht wichtig. 0 und 1 können 1 und 2 und 4 und 8 Bytes sein)

 

Alain Verleyen:

ArrayInitialize (uc,(char) 0xFF );

überprüft:

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, funktioniert ohne jegliche Compiler-Warnungen

Dankeschön