Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 156
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
1) Warum wird bei der Deklaration von int err=0 nicht sofort initialisiert?
2) Ich habe es nicht überprüft, aber laut Dokumentation wird err in einer Variablen gespeichert, die bei Verwendung der Funktion GetLastError() automatisch auf Null gesetzt wird,
und ändert sich auch immer, wenn einige Funktionen (meist Terminalfunktionen) verwendet werden
3) Dies ist der Grund, warum GetLastError() den Wert 0 anzeigte, nachdem es sich auf eine nicht existierende Ticketnummer in OrderSelect bezog:
"Die anderen Funktionen ändern den Wert der Variablen last_error unter keinen Umständen. ................., OrderSelect, ...................."
Oft würde ich eine Variable wie diese innerhalb von Funktionen deklarieren:
Weiter drinnen rufe ich sie bereits unter einer bestimmten Bedingung auf, um zu sehen, ob es einen Fehler gibt. Nun, das ist nicht nur bei mir so, sondern auch an vielen anderen Stellen des Codes, auf die ich gestoßen bin. Es ist sozusagen eine typische Situation. Ich habe mir heute überlegt, dass es nicht logisch ist, in jeder Funktion, in der man Fehler kontrollieren will, jedes Mal die gleiche Variable zu deklarieren. Ich habe darüber nachgedacht und bin zu dem Schluss gekommen, dass es einfacher ist, einmal global zu deklarieren und es im Init zu initialisieren. Das geht so:
Und außerdem, wenn Sie die err-Variable in Benutzerfunktionen aufrufen müssen, weil Sie wissen, dass sie bereits einen Wert hat. Wenn also diese Variable err in jeder Funktion am Ende aller Berechnungen aufgerufen wird, die für die Ausgabe des Fehlercodes verantwortlich ist, und GetLastError() aufruft, dann ist doch alles korrekt, oder?
Aber wenn man diese Variable nicht am Ende einer Funktion aufruft (der Kette der Codeausführung folgend), wird sie nicht zurückgesetzt, und es könnte zu einer falschen Ausführung kommen, falls es einen Fehler in der vorherigen Ausführung gab, aber nicht in der aktuellen, aber der Fehlercode wird zuletzt zurückgegeben... Und um sie zurückzusetzen, müssen Sie diese Funktion GetLastError() aufrufen. D.h. hier hängt alles davon ab, ob es aufgerufen wurde oder nicht. Wenn Sie nicht sicher sind, dass es überall sein wird, ist es einfacher, es jedes Mal neu zu versichern und zurückzusetzen, oder?
Sie können den Fehler global deklarieren und ihn dann in start() vor dem Aufruf von GetLastError() zurücksetzen, z. B:
1) Warum wird bei der Deklaration von int err=0 nicht sofort initialisiert?
2) Ich habe es nicht überprüft, aber laut Dokumentation wird err in einer Variablen gespeichert, die bei Verwendung der Funktion GetLastError() automatisch auf Null gesetzt wird,
und ändert sich auch immer, wenn einige Funktionen (meist Terminalfunktionen) verwendet werden
3) Dies ist der Grund, warum GetLastError() einen Wert von 0 an zeigte, nachdem es sich auf eine nicht vorhandene Ticketnummer in OrderSelect bezog:
"Die anderen Funktionen ändern den Wert der Variablen last_error unter keinen Umständen. ................., OrderSelect, ...................."
Sie können err global deklarieren und es dann in start() auf Null setzen, bevor Sie GetLastError() aufrufen, z. B:
dann gibt es bereits ein logisches Problem. Es sei denn, GetLastError() wird ständig aufgerufen(theoretisch am Ende jeder Benutzerfunktion).
Manchmal muss man öfters anrufen
Victor (hoz), ich verstehe nicht, warum Sie sich über den letzten Fehler aufregen.
Deklarieren Sie eine Funktion zur Fehlerbehandlung und rufen Sie sie bei Bedarf auf. Alles wird lokal sein und kann überall verwendet werden.
Victor (hoz), ich verstehe nicht, warum Sie sich über den letzten Fehler aufregen.
Deklarieren Sie eine Funktion zur Fehlerbehandlung und rufen Sie sie bei Bedarf auf. Alles wird lokal sein und kann überall verwendet werden.
Das ist verständlich. Aber diese Funktion wird aufgerufen, wenn ich sie brauche, d.h. wenn ich prüfen will, ob ein Fehler vorliegt. Wenn aber vorher irgendwo ein Fehler aufgetreten ist und im Moment kein Fehler vorliegt, wird der vorherige Fehler zurückgegeben... Denn in Ihrer Funktion Vadim wird die Variable LastError durch den Aufruf von GetLastError() nicht auf Null gesetzt. Die Sache ist die...
Das ist verständlich. Aber diese Funktion wird aufgerufen, wenn ich sie brauche, d.h. wenn ich prüfen will, ob ein Fehler vorliegt. Wenn aber vorher irgendwo ein Fehler aufgetreten ist und jetzt kein Fehler vorliegt, wird der vorherige Fehler zurückgegeben... Denn in Ihrer Funktion Vadim wird die Variable LastError durch den Aufruf von GetLastError() nicht auf Null gesetzt. Das ist der Punkt...
Sie sollte nicht auf Null zurückgesetzt werden. Es sollte zur Gewohnheit werden, nach Funktionen überall nach Fehlern zu suchen. Sie sollten den Anruf auch deaktivieren. Damit es im Kampfmodus nicht langsamer wird. D.h. es ist ein solcher Debugger.
Die Ausnahme sind natürlich Fehler, die analysiert werden müssen, um eine Entscheidung zu treffen.
Das ist verständlich. Aber diese Funktion wird aufgerufen, wenn ich sie brauche, d.h. wenn ich prüfen will, ob ein Fehler vorliegt. Wenn aber vorher irgendwo ein Fehler aufgetreten ist und im Moment kein Fehler vorliegt, wird der vorherige Fehler zurückgegeben... Denn in Ihrer Funktion Vadim wird die Variable LastError durch den Aufruf von GetLastError() nicht auf Null gesetzt. Hier ist der Punkt...