Die Sprache MQL5 von Grund auf selbst erlernen - Seite 44

 
Vladimir Simakov:

Globale Objekte, werden mit dem Standardkonstruktor initialisiert. Für primitive Typen (in unserem Fall alle außer String) ist sie 0. Aber für Speicher (Lesevariablen), die auf dem Stack zugewiesen werden, werden sie nicht initialisiert. Aus diesem Grund können globale Variablen nicht initialisiert werden; denken Sie daran, dass sie in diesem Fall gleich Null sein werden. Aber das Fehlen der Initialisierung (gewöhnen Sie sich daran, die vom Compiler erzeugten Warnungen sofort zu vermeiden, es sei denn, Sie wissen genau, was Sie tun) ist ein ernstes Problem, weil das Lesen einer nicht initialisierten Variablen zu undefiniertem Verhalten führt. Zum Beispiel verhält sich dieser Code in Release- und Debug-Builds unterschiedlich, und niemand kann garantieren, dass sich sein Verhalten nicht auch ändert, wenn Sie die Compiler-Version oder die Optimierungseinstellungen ändern:

Hallo, Vladimir, vielen Dank für die Klarstellung.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Peter, zum Thema globale Variablen: Ich habe in der Literatur noch nicht gefunden, dass globale Variablen vordefiniert sein müssen. Haben Sie einen Link zur Quelle, um Ihr Wissen in dieser Angelegenheit zu verbessern? Die MQL5-Referenz enthält keinen expliziten Hinweis auf die Initialisierung:

Der Typ bool ist für die Speicherung der booleschen Werte true oder false vorgesehen , deren numerische Darstellung 1 bzw. 0 ist .

Beispiele:

bool a =true;
bool b =false;
bool c =1;

Die interne Darstellung ist eine 1-Byte-Integer-Zahl. Es ist zu beachten, dass in boolschen Ausdrücken auch andere ganzzahlige oder reelle Typen oder Ausdrücke dieser Typen anstelle von bool verwendet werden können, ohne dass der Compiler einen Fehler erzeugt. In diesem Fall wird Null als falsch und alle anderen Werte als wahr interpretiert.

Mit freundlichen Grüßen, Vladimir.
Es ist wünschenswert, globale Variablen explizit zu initialisieren, zumindest um sich daran zu gewöhnen, dies zu tun. Nochmals, in mql4 können Sie Variablen und Arrays in Funktionen überhaupt nicht initialisieren, aber in mql5 müssen Sie es tun, sonst haben die Variablen "Müll".
 

Ich habe es in den Skriptcode eingefügt:

//--- Зададим глобальные переменные:
//переменная enough_time (достаточно времени), где bool - логическое значение: истина (true) или ложь (false)
bool enough_time=false;
//переменная enough_patience (достаточно терпения), где bool - логическое значение: истина (true) или ложь (false)
bool enough_patience=false;

In den Kommentaren des Skripts ist für einen Programmierschüler der 1. Klasse klar ersichtlich, warum der vordefinierte Wert für den Datentyp bool genau falsch und nicht wahr sein sollte.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Es wurde dem Skriptcode hinzugefügt:

Hochachtungsvoll, Vladimir.

Ich habe sonst nichts zu beklagen. :)
 
MrBrooklin:

Ich setze das Studium der Programmiersprache MQL5 fort und poste hier den Code eines Skripts, das eine Fortsetzung einer Aufgabe der Teilnehmer dieses Threads ist. Das Skript wurde in allen Modi getestet. Es wurden keine Probleme festgestellt. Anwendung der Mindestanzahl von Eingabeparametern für den Anfang. Der Skriptcode ist auf Englisch geschrieben, die Kommentare zum Code sind auf Russisch, um den Lernprozess zu erleichtern. Wie ich vorhin versprochen habe, habe ich versucht, das Skript so zu beschreiben, dass es für einen Schüler der 1. Klasse der Programmierschule verständlich ist.

Mit freundlichen Grüßen, Vladimir.

Vladimir, du solltest das nicht so schreiben. Schließen Sie die Arbeit von Funktionen mit externen Variablen nicht kurz. Die einzige Ausnahme für Sie ist bisher die Übernahme von Werten aus Eingabevariablen.
 
Vasiliy Sokolov:
Vladimir, du solltest das nicht so schreiben. Sperren Sie keine Funktionen in externen Variablen. Die einzige Ausnahme für Sie ist bisher die Übernahme von Werten aus Eingabevariablen.

Hallo Wassili! Um ehrlich zu sein, habe ich die Bedeutung des fettgedruckten Textes nicht ganz verstanden. Bitte erläutern Sie, was Sie damit meinen.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Hallo Wassili! Ehrlich gesagt, habe ich den Sinn des fettgedruckten Textes nicht ganz verstanden. Bitte erläutern Sie, was Sie damit meinen.

Mit freundlichen Grüßen, Vladimir.

Verwenden Sie keine globalen Variablen. Ich werde später schreiben, warum sie nicht verwendet werden sollten.
 
Vasiliy Sokolov:
Verwenden Sie keine globalen Variablen. Warum Sie sie nicht verwenden sollten, schreibe ich später.

Dazu gibt es eine schöne Anekdote:

- Frage: Was ist der beste Typ für eine globale Variable in C++?

- Antwort: //

 
Vasiliy Sokolov:
Verwenden Sie keine globalen Variablen. Ich werde später schreiben, warum sie nicht verwendet werden sollten.

Jetzt verstehe ich. Danke, ich warte darauf, von Ihnen zu hören, warum Sie keine globalen Variablen verwenden können.

Mit freundlichen Grüßen, Vladimir.

 
In diesem Stadium, bis zum Übergang zur OOP-Programmierung, ist die Verwendung von globalen Variablen voll und ganz gerechtfertigt, und es gibt keinen Grund, sich von ihnen abzuwenden. Sie sind bequem und einfach überall im Programm zu verwenden. Warum sollten sie nicht verwendet werden? Imho.