Fehler, Irrtümer, Fragen - Seite 265

 
Voodoo_King:

und bitten Sie mich nicht, weitere Details an den Helpdesk zu schreiben. Diese Situation hätte vor der Veröffentlichung des Builds erkannt werden können und müssen. in den wichtigsten Bereichen gibt es eine Panne nach der anderen.

Junger Mann, wenn Sie wüssten, auf welche Harke die Leute hier getreten sind...

Zweitens: Die Entwickler verkaufen sich im wirklichen Leben nicht.


Also wischen Sie sich den Sabber ab, schreiben Sie eine Anwendung (in der Anwendung können Sie die Entwickler dafür schelten, dass sie so schlecht sind).

Aber es muss etwas getan werden.

 
Danke, wir werden uns das ansehen.
 

Ich möchte fragen (ich bin aus irgendeinem Grund noch nie auf dieses Problem gestoßen)...

Ist diese Art von Konstrukt völlig dem Programmierer überlassen (Schleifenbildung bei Überlauf einer vorzeichenlosen Zahl)?

   uchar LastBarInd = 2;
   for (uchar i = LastBarInd; i >= 0; i--)
     {
      ................. // тело
     }

Oder kann das im Compiler behoben werden?

 
AlexSTAL:

Ich möchte fragen (ich bin aus irgendeinem Grund noch nie auf dieses Problem gestoßen)...

Fällt ein solches Konstrukt vollständig in die Verantwortung des Programmierers (Schleifenbildung bei Überlauf einer vorzeichenlosen Zahl)?

Oder kann es im Compiler optimiert werden?


Die Verantwortung liegt ganz beim Programmierer.

Im Compiler kann höchstens eine Warnung ausgegeben werden.

 
stringo:

Dies liegt ganz im Ermessen des Programmierers.

In einem Compiler kann höchstens eine Warnung ausgegeben werden.

Eine Warnung kann nicht schaden, bitte tun Sie das.
 
AlexSTAL:
Eine Warnung kann nicht schaden, bitte tun Sie das.

gemacht

void OnStart()
  {
   uchar LastBarInd;
   Print(LastBarInd>=0);
   Print(LastBarInd<0);
  }

// expression is always true    1.mq5   4       20
// expression is always false   1.mq5   5       20
 
mql5:

gemacht

Entschuldigung... Ich verstehe das nicht...

Was hat LastBarInd mit der Subtraktion von Eins von Null für eine vorzeichenlose Zahl in einer Schleife zu tun?

Uchar  i >= 0; i--
 
AlexSTAL:

Entschuldigung... Ich verstehe das nicht...

Was hat LastBarInd mit der Subtraktion von Eins von Null für eine Zahl ohne Vorzeichen in der Schleife zu tun?


Und Sie wollen, dass der Compiler im Voraus alle möglichen Werte berechnet, die die i-Variable annehmen kann, und Ihnen eine Warnung gibt?

SZZ Der Compiler hat bereits eine Menge Arbeit zu erledigen, so dass er auf Fehler des Programmierers achten muss.

Wahrscheinlich wird es zur Laufzeit einen Fehler geben.

 
AlexSTAL:

Entschuldigung... Ich verstehe das nicht...

Was hat LastBarInd mit der Subtraktion von Eins von Null für eine Zahl ohne Vorzeichen in der Schleife zu tun?


Das Problem bei der Schleifenbildung ist nicht die Art und Weise, wie die Variable geändert wird (es sei denn, sie wird auf Null geändert), sondern die Überprüfung des Wertes dieser Variablen, der nie kleiner als Null sein wird.

void OnStart()
  {
   uchar v;
   Print(v>=0);
   Print(v<0);
  }
 
Urain:

Möchten Sie, dass der Compiler die Werte, die die i-Variable annehmen kann, im Voraus berechnet und eine Warnung ausgibt?

SZZ Der Compiler hat bereits eine Menge Arbeit zu erledigen, so dass er auf Fehler des Programmierers achten muss.

ZS Der Fehler wird wahrscheinlich auftreten, aber zur Laufzeit.

Nein... Ich meinte einen speziellen Fall, wenn:

1) Der Typ der Variablen i ist vorzeichenlos.

2) Eine explizite Konstante

i >= 0

3) Subtraktion

i--