Fehler, Irrtümer, Fragen - Seite 2762

 
Igor Makanu:

überprüft:

OK, funktioniert ohne jegliche Compiler-Warnungen

Danke

Sie werden lachen, aber auch das funktioniert ohne Warnung

uchar c[16];
int ini2=0xFFFF;
ArrayInitialize(c, (uchar)ini2);
 
Aleksey Mavrin:

Sie werden lachen, aber auch das funktioniert ohne Warnungen

Sie werden auch lachen, aber das ist der Weg zu UB und der Weg, um den kniffligen Bug bei den nächsten Builds zu bekommen :-)

int foo=-1;

uchar bar=(uchar)foo; // чему должен быть равен bar ?

 
Igor Makanu:

überprüft:

OK, funktioniert ohne jegliche Compiler-Warnungen

Danke

Warum wird der ArrayInitialize-Aufruf in diesem Fall benötigt? Warum schreiben Sie nicht einfach uchar uc[16] = {0xFF}; ?

ArrayInitialize ist sinnvoll für dynamisch verteilte Arrays, während hier die Größe zum Zeitpunkt der Beschreibung bekannt sein sollte.

 
Aleksey Mavrin:

Sie werden lachen, aber auch das funktioniert ohne jede Warnung

es ist nicht lustig, es ist keine korrekte Initialisierung, was Sie vielleicht nicht verstehen, warum Sie es getan haben

es ist klar, dass das höchstwertige Byte beim Umwandeln in uchar abgeschnitten wird


Stanislav Korotky:

Warum brauche ich ArrayInitialize Aufruf in diesem Fall? Warum schreiben Sie nicht einfach uchar uc[16] = {0xFF}; ?

ArrayInitialize ist sinnvoll für dynamisch verteilte Arrays und hier ist die Größe zum Zeitpunkt der Beschreibung vermutlich bekannt.

Funktioniert nicht

Druckt man sie aus, so ist das erste Element 255 und der Rest 0, 0, 0, ...

 
Igor Makanu:

OK, funktioniert ohne jegliche Compiler-Warnungen

ohne Geisterbild ist normalerweise wie folgt

ArrayInitialize(uc, '\xFF');
UPD nein, auch eine Warnung, ein solches Literal ist vom Typ ushort
 
Wieder einmal auf gleicher Höhe...
void OnStart(){
   uchar uc[16];
   ArrayInitialize (uc, -1);
   ArrayPrint(uc);  // 255 255 255 255 255 ...
}
 
Sergey Dzyublik :
Noch einmal, unter gleichen Bedingungen...
Wo liegt das Problem?
 
Sergey Dzyublik:
Wieder einmal an Ort und Stelle...

Ich bin total verwirrt )

Es warnt vor Konstanten ab 128 und 0xFF, aber nicht vor int-Variablen mit denselben Werten.

Außerdem warnt es auch nicht vor der Konstante -1 int. Gibt es da eine Logik?

s.s. Ich denke, es ist verständlich mit -1, es ist auf jede vorzeichenlose durch max Wert nach den Regeln reduziert.
 
Andrei Trukhanovich:

ohne einen solchen Geist.

UPD nein, auch eine Warnung, ein solches Literal ist vom Typ ushort
'\xFF'

Wow... in 4 (gelegentlich geöffneten) Brötchen.

void OnStart()
  {
ushort foo='\xFF';

  }

PS/ wenn bei Gelegenheit jemand eine Website hat, geben Sie ihm einen Klaps auf die Hand.

 
In Build 2460 und 2470, wenn Sie alle Trades löschen und deaktivieren Auto-Refresh und öffnen Sie eine neue Bestellung sie alle wieder erscheinen, bevor dies nicht geschehen und ein Teil der Berater und Indikatoren schreibt err 400 und err 401, obwohl sie ohne Fehler kompilieren, aber nicht arbeiten wollen.....