Der Unterschied zwischen extern und input - Seite 5

 
Alexey Navoykov:

Stellen Sie sich vor, dass diese Initialisierungen in verschiedenen Include-Dateien vorgenommen werden. Das Endergebnis hängt dann von der Reihenfolge ab, in der diese Dateien eingefügt werden.

Nun - auch solche offensichtlichen Fehler bei diesen Externen

Ich schreibe also, dass sie keinen Sinn haben, sie dienen nur der Kompatibilität mit altem Code - ersetzen Sie extern durch input und korrigieren Sie Fehler... Unklarer Zweck.... extern ist bedeutungslos - schlagen Sie es nach

 
Alexey Navoykov:

Leider ist die Implementierung von externen Variablen in MQL5 noch nicht abgeschlossen, und deshalb empfehle ich nicht, sie zu verwenden - es könnte zu Problemen führen. Ich meine den Mangel an Kontrolle über die obligatorische einmalige Initialisierung dieser Variablen.

Sie können ihn zum Beispiel so schreiben:

Stellen Sie sich vor, dass diese Initialisierungen in verschiedenen Plugins durchgeführt werden. Das Endergebnis hängt dann von der Reihenfolge ab, in der diese Dateien eingefügt werden.

Oder wir können es so schreiben (ausführbare Datei):

hier haben wir die externe Variable überhaupt nicht initialisiert, aber es gibt auch keinen Fehler.

Dementsprechend gibt es keine Kontrolle darüber, ob die gleichen Variablen in anderen Dateien definiert sind oder nicht. Sie können versehentlich den Namen ändern, aber das Programm wird kompiliert, als ob nichts passiert wäre, obwohl in anderen Dateien eine Variable mit einem anderen Namen steht.

Alles in allem passt es nirgendwo hin. Deshalb ist es besser, Funktionen anstelle von externen Variablen zu verwenden, da diese garantiert nur eine Definition haben, nicht mehr und nicht weniger.

Bei diesem Ansatz sollten Sie überhaupt keinen Computer verwenden. Denn wenn Sie die Augen schließen und auf der Tastatur herumstochern, werden Sie nur Unsinn hören.

Das eigentliche Problem bei extern tritt auf, wenn Sie versuchen, extern aus input zu machen. Ich erinnere mich nicht mehr an die Einzelheiten, es ist schon lange her. Als Ergebnis habe ich extern überhaupt abgelehnt, eine einfache Variable in der Include-Datei deklariert und ihren Wert in der EA inite durch einen Funktionsaufruf gesetzt.

 
Igor Makanu:

Da haben wir's - selbst so offensichtliche Fehler bei diesen Externen

Deshalb schreibe ich, dass sie keinen Sinn haben, sie dienen nur der Kompatibilität mit alten Codes - ersetzen Sie extern durch input und korrigieren Sie Fehler... sonst sagt die Hilfe... Unklarer Zweck.... Extern macht keinen Sinn - egal, wie sehr man sich bemüht.

Es gibt einen Sinn. In MT5 wird extern in den enthaltenen Dateien überhaupt nicht eingegeben.

 
Dmitry Fedoseev:

Das macht Sinn. In MT5 ist extern in Include-Dateien überhaupt keine Eingabe.

Warum sollten Sie Externs zu Include-Dateien hinzufügen?

Ich weiß nicht, was in der modernen Welt des Programmschreibens vor sich geht, aber ich habe gelernt, im prozeduralen Stil zu schreiben, und dann habe ich angefangen, OOP zu verwenden. Der erste und der zweite Stil implizieren, dass jede logische Einheit voll funktionsfähig sein muss, wenn sie in ein anderes Programm übertragen wird, d.h. eine Funktion wird geschrieben - ihre Beschreibung (Header) enthält alle Parameter, die sie verwendet - sie braucht keine iprouts - man schneidet diese Funktion aus und fügt sie in eine andere Datei ein, sie "bewegt" sich so, wie sie ist - dasselbe gilt für Klassen.

Und iprouts selbst sollten nur die Benutzeroberfläche erstellen, sie sollten immer in der Hauptdatei beschrieben werden.


Und mit extern in der Include-Datei, imho Weg schwer zu bekommen, um den Fehler zu verfolgen,@Alexey Navoykov oben zeigte, wie es passiert, leider mehr als die Hälfte der Variablennamen alle Programmierer haben, um einen Buchstaben den gleichen Namen, der maximale Unterschied bei der Verwendung von Groß- / Kleinbuchstaben, als Beispiel MagicNumber oder Magic - wenn Sie KB aussehen, dann jede andere Variable, so dass in Ihrer Methode ist eine Bedrohung für "Schatten" extern in seiner Variable, zum Glück nur wenige Menschen jetzt verwenden ecterps

 
Igor Makanu:

warum iprtu's in Include-Dateien hinzufügen?

Ich weiß nicht, was los ist in der modernen Welt des Schreibens von Programmen, aber ich habe gelernt, in prozeduralen Stil zu schreiben, dann begann zu OOP verwenden, sowohl in der ersten und in der zweiten Stil ist es impliziert, dass jede logische Einheit muss voll funktionsfähig sein, wenn in ein anderes Programm übertragen, dh Sie schrieb eine Funktion - in seiner Beschreibung (im Titel) haben alle Parameter, die es verwendet - es braucht nicht iprouts - schneiden Sie diese Funktion und in eine andere Datei eingefügt, es "bewegt", wie es ist - das gleiche mit Klassen.

Und die iprouts selbst sollten nur die Benutzeroberfläche bilden, sie sollten immer in der Hauptdatei beschrieben werden.

Das stimmt nicht. In Include-Dateien fügen Sie Externs hinzu. So können Sie in Include-Dateien die in der Hauptdatei deklarierten Eingaben verwenden.

Übrigens wird sie fast immer benötigt, sobald Sie anfangen, Include-Dateien zu verwenden.

 
Dmitry Fedoseev:

Nicht so. Hinzufügen von Externs zu Include-Dateien. So können Sie in der Include-Datei die in der Hauptdatei deklarierten Eingaben verwenden.

Das ist übrigens genau das, was Sie brauchen, sobald Sie anfangen, Include-Dateien zu verwenden.

Geben Sie ein Beispiel dafür, warum extern verwendet werden sollte

 
Igor Makanu:

ein Beispiel für die Angemessenheit der Verwendung von externen

Das gibt es schon seit einiger Zeit.

 
Dmitry Fedoseev:

Sie sollten überhaupt keinen Computer benutzen, wenn Sie diesen Ansatz wählen. Denn wenn man die Augen schließt und auf der Tastatur herumstochert, bekommt man nur Mist.

Natürlich werden wir den Müll bekommen, aber er wird sich kaum kompilieren lassen. Die Aufgabe des Compilers ist es nicht, Unsinn zu kompilieren. Und in diesem Fall ist das nicht der Fall.
 
Dmitry Fedoseev:

Es ist jetzt schon eine Weile hier.

Das ist es, wovon ich spreche.

Ihr Beispiel ist die Erzeugung von versteckten Fehlern, der Variablenname x wird oft verwendet.... schrieb oben

Imho sollte es so aussehen:

extern int x;

int z()
  {
   static int x;
   x=122;
   return x;
  }
 
Igor Makanu:

Das ist es, wovon ich spreche.

Ihr Beispiel ist das Laichen von versteckten Wanzen, der Variablenname x wird oft verwendet.... schrieb oben

Imho sollte es so aussehen:

Niemals. Die Variable x sollte nicht nur in einer Funktion, sondern in allen Funktionen verfügbar sein. Und noch mehr - sie sollte sowohl in der Hauptdatei als auch in allen verbundenen Dateien verfügbar sein.

Grund der Beschwerde: