Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Lokale Variablen und Parameter befinden sich im selben Geltungsbereich. Es spielt also keine Rolle, ob ein Parameter diesen Namen oder eine lokale Variable hat, aber in beiden Fällen verbirgt dieser Name den Namen im äußeren Geltungsbereich.
Nicht in jeder Funktion. Wenn eine Variable per Referenz übergeben wird, wird keine lokale Kopie erstellt und die Operation wird direkt mit der übergebenen Variable durchgeführt. Was für ein Versteckspiel findet hier statt?
Hier findet das Verstecken von Namen statt. Alles andere - kopieren, nicht kopieren - ist zweitrangig. Wenn innerhalb einer Funktion ein Referenzname verwendet wird, wird die Arbeit an dem Objekt ausgeführt, auf das sich die Referenz bezieht. Wenn sie sich auf ein Objekt im äußeren Bereich bezieht, wird die Arbeit mit diesem Objekt ausgeführt. Dies liegt nicht daran, dass kein Name versteckt wird - das Verstecken ist vorhanden, genau wie in anderen Fällen - sondern daran, dass der Verweis auf dieses Objekt verweist. Eine Funktion wird auf diese Weise aufgerufen. Dieses Objekt wurde per Verweis weitergegeben und verweist nun auf es. Beim Aufruf und der Übergabe zum Zeitpunkt des Aufrufs eines anderen Objekts wird derselbe Funktionscode mit einem anderen Objekt funktionieren.
Ich habe ein Beispiel mit einem Typnamen und einem Variablennamen gegeben, d.h. mit Entitäten, die von ihrer Natur her so unterschiedlich wie möglich sind, um zu zeigen, dass sich das Verstecken auf Namen bezieht, und alles andere ist zweitrangig.
Als ich jedoch versuchte, ein weiteres Beispiel in MQL4++ zu diesem Thema zu erstellen, entdeckte ich zufällig, dass ein zusätzlicher Bereich für Parameter in MQL4++ erstellt wird. Der Geltungsbereich lokaler Variablen ist bereits darin verschachtelt:
Dieses Beispiel ist KOMPLIZIERT mit einer charakteristischen Warnung:
Und später wird sie erfolgreich ausgeführt:
Es ist offensichtlich, dass in MQL4++ ein weiterer "Layer"-Bereich für Parameter geschaffen wird. Aus diesem Grund ist es möglich, eine lokale Variable mit demselben Namen wie der Parameter zu deklarieren.
In C/C++ gibt es keine solche "Schicht":
Der Compiler erklärt im Volksmund, dass es bereits eine Variable mit diesem Namen im Geltungsbereich gibt:
Das heißt, der Geltungsbereich von Funktionsparametern und ihren lokalen Variablen ist ein und derselbe.
Warum das in MQL4++ nicht der Fall ist und zu welchem Zweck - das ist natürlich eine interessante Frage...
Dieses Beispiel KOMPILIERT mit einer charakteristischen Warnung:
In diesem Fall geht es um die Übergabe einer Variablen per Referenz und eine fehlerhafte Warnung, nicht um die Erstellung einer lokalen Kopie.
Ich habe nur die ersten paar Beiträge gelesen.
Natürlich geht es auch unter der Matte nicht ganz glatt. Hier gibt es einige Versäumnisse der Entwickler beim Testen des Produkts, das den Endverbraucher erreicht. Allerdings ist auch MT4 nicht stark in Multi-Währungs-Strategien (Testen), und muss, muss verfeinert werden. Ich hoffe also, dass es eines Tages doch noch so weit sein wird.
Wenn Sie noch nicht gut programmieren können, sollten Sie die Demoversion vorerst verwenden. Wie immer kommt ein schlechter Tänzer den "Bällen" in die Quere, einschließlich Gold und Rosa.
Viel Glück!
Dies ist ein Fall der Übergabe einer Variablen per Referenz und einer fehlerhaften Warnung, nicht der Erstellung einer lokalen Kopie.
Für die Art der Warnung spielt das keine Rolle. Außerdem spielt es keine Rolle, ob eine Variable als Referenz oder als Wert übergeben wird, sondern welcher Typ sie ist:
Der Code wird kompiliert, und die von Ihnen angesprochene Warnung wird erzeugt:
Aus irgendeinem Grund wollen Sie das nicht verstehen.
Die Warnung selbst ist keineswegs fehlerhaft. Darüber hinaus ist die Umfangsverfolgung in MQL4++ auf den ersten Blick erstaunlich gut, wenn man sie mit der Art und Weise vergleicht, wie andere Dinge gemacht werden.
Warnungen sind zwar richtig, aber unpraktisch, und doch kann man sie nicht abstellen - darum geht es ja. Und schon gar nicht die Übertragung des Links.
Für die Art der Warnung ist dies unerheblich. Außerdem spielt es keine Rolle, ob die Variable als Referenz oder als Wert übergeben wird
Es besteht ein großer Unterschied im Wesen der Warnung zwischen der Übergabe der Variablen selbst und ihrer Änderung in einer Funktion und der Erstellung einer Kopie der Variablen, während die Variable selbst unverändert bleibt.
Und die Tatsache, dass die Warnungen nicht deaktiviert oder angepasst werden können, ist es eine klassische MC proprietären Stil - "nicht lassen":))) Man kann nichts dagegen tun, aber man kann es nur demütig und sanftmütig akzeptieren, weil dieser Stil zu einem religiösen Attribut erhoben wurde... Es hat keinen Sinn, hier nach Logik oder irgendeiner Art von Gerechtigkeit zu suchen. ))
Igitt igitt, bei mir läuft das ganze Methaquot-Zeug wie am Schnürchen.
Überhaupt keine Beschwerden.
Ein potenzieller Fehler ist genau das: ein potenzieller Fehler ist nicht unbedingt ein Fehler. Daher ist die Aussage "das bedeutet, dass wir diese Fehler beheben müssen" falsch, da es sich möglicherweise gar nicht um Fehler handelt.
...
Aber Gott bewahre, dass Sie einen unüberschaubaren Code bekommen, wenn es keine Fehler oder Warnungen gibt und das Programm gut zu funktionieren scheint, aber hin und wieder seltsame Fehler auftreten, deren Grund nirgends zu finden ist. In solchen Momenten wird man mit Dampf überschüttet und träumt von Fehlern wie "ungültiger Zeiger" oder "Division durch Null".
Der Compiler hat nichts damit zu tun, es ist typisch für fehlerhaftes Schreiben, wenn es keine Testprüfungen in gefährlichen Codefragmenten gibt, in denen undefinierte oder fehlerhafte Zustände möglich sind, weshalb die Störungen auftreten.
Funktionale Codeprüfungen haben nichts mit dem Compiler zu tun, und es macht keinen Sinn, dies von vornherein zu erwarten.
Auch hier gilt, dass professionelle Programmierer in der Regel nicht auf die Warnungen achten, weil sie die Logik des Compilers kennen, während Compiler bei der Überprüfung der Codefunktionalität nutzlos sind.
Es besteht ein großer Unterschied in den wesentlichen Warnungen zwischen der Übergabe der Variablen selbst und ihrer Änderung in einer Funktion und der Erstellung einer Kopie davon, wobei die Variable selbst unverändert bleibt.
Hier handelt es sich nur um eine andere Art von Warnung. Über das Verstecken von Namen.
Die Variable selbst wird nicht übergeben. Eine Referenz darauf wird übergeben.