Fehler, Irrtümer, Fragen - Seite 161

 
alexvd:

Was war die Aktion davor?

Hilft das Update?

Ich habe das Terminal nach einigen Tagen der Nichtbenutzung wieder geöffnet. Ich habe dieses Bild. Dann wurde das Skript verwendet, um den Verlauf hochzuladen. Keine Änderung. Ich habe ein paar Stunden gewartet. Jetzt ist alles in Ordnung.

 
Können Sie mir sagen, wo ich herausfinden kann, wer den MT5 auf einem echten Konto laufen hat?
 
void OnStart()
  {
//---
   int x,y = 0;
   Print("x++:");
   x = x++;
   Print("x=",x," y=",y);
   y = x++;
   Print("x=",x," y=",y);
  }

Können Sie erklären, warum nach den Ergebnissen des Laufs x = 0 und y = 1 ist? Gebäude 342

PS. Sollte lesen ... x==1 und y==0 ...

 
Ashes:

Können Sie erklären, warum nach den Ergebnissen des Laufs x = 0 und y = 1 ist? Gebäude 342

Siehe hier https://www.mql5.com/ru/docs/basis/operations/mathoperation

Der Compiler zeigt keine Fehler oder Warnungen an?

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Основы языка / Операции и выражения / Арифметические операции - Документация по MQL5
 
Ashes:

Können Sie erklären, warum nach den Ergebnissen des Laufs x = 0 und y = 1 ist? Gebäude 342

Wir haben geprüft, das Ergebnis ist x=1, y=0

das erste Inkrement x=x++ zerlegt sich in

t=x;  // x=0
x++;  // x=1
x=t;  // x=0

 
Ashes:

Können Sie erklären, warum nach den Ergebnissen des Laufs x = 0 und y = 1 ist? Gebäude 342

Ja, das können wir. Es geht nur um die Umsetzung von x = x++;

Vor dem Post-Inkrement wird der x-Wert in einer temporären Variablen gespeichert. Dann wird ein Inkrement durchgeführt. Dann wird eine Zuweisung von der temporären Variablen vorgenommen.

 
Lizar:

Siehe hier https://www.mql5.com/ru/docs/basis/operations/mathoperation

Der Compiler zeigt keine Fehler oder Warnungen an?

Der MT5-Compiler schluckt sie stillschweigend! Es lässt sich nicht in MT4 kompilieren.

Aus Neugierde habe ich ein ähnliches Konstrukt in C++ (aus Visual Studio 2005) ausprobiert, und das Ergebnis für x und y ist dasselbe.

 
Ashes:

Können Sie erklären, warum nach den Ergebnissen des Laufs x = 0 und y = 1 ist? Gebäude 342

Sie müssen Variablen initialisieren, bevor Sie mit ihnen Matte-Operationen durchführen. Wenn Sie sie einfach einer nicht initialisierten Variablen zuweisen, ist alles in Ordnung.

Es ist jedoch immer eine gute Idee, Variablen zu initialisieren, um Probleme zu vermeiden.

void OnStart()
  {
//---
   int x=0,y = 0;
   Print("x++:");
   x++;
   Print("x=",x," y=",y);
   y=x;
   Print("x=",x," y=",y);
  }
 
Ashes:

Der MT5-Compiler schluckt still und leise! In MT4 schlägt die Kompilierung fehl.

Aus Neugierde habe ich eine ähnliche Konstruktion in C++ (aus Visual Studio 2005) ausprobiert - das Ergebnis für x und y ist das gleiche.

Diese Stelle ist im C++-Standard nicht definiert und es wird ausdrücklich darauf hingewiesen, dass sie von der Implementierung abhängt. Es gibt 2 Hauptimplementierungen:

1. Führen Sie unmittelbar nach der Verwendung einer Variablen in einem Ausdruck ein Post-Inkrement durch. (wie wir es getan haben).

2. Postinkrement, nachdem der gesamte Ausdruck berechnet wurde.

 

Ich meine, wo kann ich herausfinden, welche Makler MT5 in Echtzeit betreiben?