Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 121

 
TheXpert:

Dann verstehe ich es nicht.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Eigenheiten von mql5, Tipps und Tricks

Alexey Navoykov, 2019.01.14 16:35

Wenn Sie es brauchen, können Sie void OnTick(); ganz am Anfang deklarieren. Aber im Allgemeinen ist die Reihenfolge der Funktionsdeklaration eine zusätzliche Möglichkeit, die Korrektheit des Codes zu kontrollieren. Wenn zum Beispiel in einem Plug-in OnTick() oder, noch schlimmer, OnInit() aufgerufen wird, ist das gut? Die Bibliotheken dürfen Ihren Arbeitscode nicht sehen.
 
fxsaber:

Dann verstehe ich es nicht.

Die Forward-Deklaration gilt nur für Klassen und Strukturen, nicht für Funktionen.

 
fxsaber:

Der Punkt ist, dass wenn die Funktionen, die Sie verwenden wollen, im Inlude spezifiziert sind, Sie sie entsprechend dem Vorschlag schreiben müssen, wenn das Inlude unten ist.

Wo liegt das Problem, wenn man einen Einleger früher einsetzt?

Es kann für eine Datei unbequem sein (Funktion mit Körper muss vor dem Aufruf sein), aber wenn die Funktion in mqh - was ist das Problem, die inlude am Anfang einfügen?

 
TheXpert:

Die Forward-Deklaration gilt nur für Klassen und Strukturen, nicht für Funktionen.

Es ist gut, dass Sie das geklärt haben.

Andrey Khatimlianskii:

Wo liegt das Problem, wenn man einen Einleger früher einsetzt?

Für eine einzelne Datei (eine Funktion mit einem Body, der notwendigerweise vor dem Aufruf steht) mag das unpraktisch sein, aber wenn die Funktion in mqh steht - wo ist das Problem, einen Inline am Anfang einzufügen?

Einige Konstrukte mit Makros haben manchmal ein inlude in der letzten Zeile erfordert. Ich werde Ihnen kein konkretes Beispiel nennen, denn ich bin ihnen in der Praxis schon oft begegnet.

 
TheXpert:

Die Forward-Deklarationen gelten nur für Klassen und Strukturen, nicht für Funktionen.

Nein, auch ich liege falsch. Eine Funktion hat eine Deklaration und eine Definition.
 
fxsaber:

Einige Konstrukte mit Makros erforderten manchmal ein inlude in der letzten Zeile. Ich werde Ihnen kein konkretes Beispiel nennen, ich bin ihnen in der Praxis schon oft begegnet.

Ich glaube nicht, dass einzelne Makros es wert sind, dafür die architektonische Korrektheit zu opfern.

Der Programmcode muss auf jeden Fall genau nach dem vorgesehenen Algorithmus ausgeführt werden. Der Zugriff auf eine Variable vor ihrer Initialisierung ist unsinnig und sollte nicht kompiliert werden.

 

Übrigens, wenn ein inlude einige Funktionen verwendet, die dort nicht vorhanden sind, müssen sie trotzdem dort deklariert werden. Genauso wie Klassen und externe Variablen. Ansonsten ist es eine Krücke, keine Einfügung.

Dementsprechend sollte das Plug-in nicht von dem Ort abhängen, an dem es eingesteckt wird.

 
Alexey Navoykov:
Übrigens, wenn im inlude Funktionen verwendet werden, die dort nicht vorhanden sind, müssen sie dort trotzdem deklariert werden. Ebenso wie Klassen und externe Variablen. Ansonsten ist es keine Einfügung, sondern eine Krücke.

Was meinen Sie, was ein Inlude ist? Für mich ist es nur ein Stück Text, das einer separaten Datei zugeordnet ist. Und die Wiedereinführung in die Quelle wird ignoriert. Sonst nichts.

 
fxsaber:

Was meinen Sie, was ein Inlude ist? Für mich ist es nur ein Stück Text, das einer separaten Datei zugeordnet ist. Und die Wiedereinführung in die Quelle wird ignoriert. Sonst nichts.

Ich denke, es sollte ein unabhängiger und eigenständiger Code sein. Das macht mehr Sinn, und es ist einfach, diesen Code zu kontrollieren und unabhängige Syntaxprüfungen durchzuführen. Aber wenn alles in verschiedenen Dateien ist und es nicht klar ist, von wo aus es aufgerufen wird, ist es ein Chaos.

 
Alexey Navoykov:

Nun, ich denke, es sollte unabhängiger unabhängiger Code sein. Das macht mehr Sinn und ist einfacher zu kontrollieren und eine unabhängige Syntaxprüfung dieses Codes durchzuführen. Und wenn alles über die Dateien verstreut ist und es nicht klar ist, was von wo aus aufgerufen wird - das ist Chaos.

Beispiele für meinen Code wurden bereits veröffentlicht. Ich habe noch keine Rückmeldungen über das Chaos gehört, auch nicht für Incudes, die sich nicht kompilieren lassen.