Fehler, Irrtümer, Fragen - Seite 2332

 
Vladimir Pastushak:

Laut der Hilfe sollte es false zurückgeben, wenn die Datei nicht existiert.

Streng genommen geht aus der Dokumentation nicht hervor, dass das Ergebnis von FileGetInteger(FileName,FILE_EXISTS) unbedingt ein bool ist

Aber die Logik ist auf jeden Fall verschnörkelt

https://www.mql5.com/ru/forum/1111/page1788#comment_4071879

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2017.02.08
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 

Die Site-Engine hebt das Makro nicht in Rot hervor.

 
Vladimir Pastushak:

bool file_exists=(bool)FileGetInteger(FileName,FILE_EXISTS);

In jedem Fall wird true zurückgegeben, wenn es eine Datei gibt oder nicht, und Fehler 5019, wenn es keine Datei gibt. Laut Hilfe sollte es false zurückgeben, wenn es keine Datei gibt.

bool file_exists=FileIsExist(FileName); Funktioniert korrekt

Der richtige Weg wäre

bool file_exists=FileGetInteger(FileName,FILE_EXISTS)==1; 
 
Vladimir Pastushak:

Habe es in mt 5

Bitte stellen Sie den Code zur Untersuchung per PM zur Verfügung.

 
fxsaber:

Die Website-Engine hebt das Makro nicht in Rot hervor.

Es sollte nur dann rot hervorgehoben werden, wenn das Makro zuvor definiert wurde

#define  PRICEST_TICK_PRICE bid
//...
#define PRICEST_TICK_PRICE ask

Woher weiß man sonst, dass ein Makro nicht schon vorher definiert wurde, und dass es sich nicht um eine zufällige Überschreibung handelt?

Manchmal funktioniert es sogar in MetaEditor:


 
A100:

Die Farbe sollte nur hervorgehoben werden, wenn das Makro zuvor definiert wurde

Woher wissen wir sonst, dass das Makro nicht schon vorher definiert wurde?! und es handelt sich nicht um eine versehentliche Überschreibung

Dann müssen wir definieren, was ein hervorgehobenes Makro ist und was ein nicht hervorgehobenes Makro ist.

Ich dachte, alle Makros seien hervorgehoben. Offenbar ist die Regel anders.

 
fxsaber:

Dann müssen wir entscheiden, was ein hervorgehobenes Makro ist und was nicht hervorgehoben ist.

Ich dachte, alle Makros seien hervorgehoben. Offenbar ist die Regel anders.

Ich denke, wir müssen uns entscheiden, wofür das Hervorheben gut ist, ist es nur für die Schönheit oder für die Informiertheit? Zurzeit gibt es keine Regeln im eigentlichen Sinne:

Im Allgemeinen ist es wünschenswert, dass ein Identifikator, der bereits definiert wurde und nicht unverteidigt ist, farblich hervorgehoben wird

 
A100:

Ich denke, wir müssen entscheiden, worum es bei der Beleuchtung geht: geht es um Schönheit oder um Information? Zurzeit gibt es keine Regeln im eigentlichen Sinne:

Für mich gilt die Faustregel: Das Makro ist immer rot.

 
fxsaber:

Für mich ist die Regel praktisch: Das Makro ist immer rot.

Was ist hier die Bequemlichkeit?
#define PRICEST_TICK_PRICE bid

Die Unannehmlichkeiten liegen auf der Hand: Sie können nicht feststellen, ob der Bezeichner PRICEST_TICK_PRICE zuvor definiert wurde oder nicht

Und warum sollte es hier (3)

//Ln 240
#define  PRICEST_TICK_PRICE ask //(1)
#undef  PRICEST_TICK_PRICE     //(2)
void OnStart()
{
        int PRICEST_TICK_PRICE; //(3)
}

rot sein? Und wenn sie hier nicht rot ist (3), warum sollte sie dann in (1) rot sein?

Praktische Regel: ein Bezeichner ist nur dann rot, wenn er zuvor(!) definiert und nicht rückgängig gemacht wurde

 

A100:
А в чем здесь удобство?

Ich kann sehen, dass dies ein Makro ist. In diesem Fall brauchen Sie #define lateral nicht zu sehen.

Die Unannehmlichkeiten liegen auf der Hand: Es ist nicht nachvollziehbar, ob die Kennung PRICEST_TICK_PRICE zuvor definiert wurde oder nicht.

Ich habe nie versucht, sie anhand der Farbe zu bestimmen. Außerdem, wenn alles in #ifdef steht, können MQL4 und MQL5 unterschiedliche Farben haben. Am einfachsten ist es, wenn Sie ALT+G auf den Makronamen eingeben, um zu sehen, ob er vorhanden ist oder nicht.

Praktische Regel: Ein Bezeichner ist nur dann rot, wenn er zuvor(!) definiert wurde

Mir wäre es recht, wenn das Makro zumindest einmal irgendwo in #define, #ifdef, #undef usw. erwähnt würde. Auch wenn sie nicht definiert ist.