Fehler, Irrtümer, Fragen - Seite 1964

 
fxsaber:
...

Es hat wirklich lange gedauert, bis es so weit war. Vielleicht bin ich nicht der Einzige, der sich darüber ärgert.


Ja, Sie sind nicht der Einzige. )

 
fxsaber:

Bitte erläutern Sie den typeof. Ich konnte keine gute Erklärung für unerfahrene Programmierer finden.

Ich habe diese Zeilen (versehentlich) gelöscht.

Sie haben https://www.mql5.com/ru/forum/1111/page1983#comment_5616331 einen ähnlichen Eintrag wie diesen

template<typename T>
void g( T Value ) { Print(typename(Value)); }
Unwichtiger Unterschied: Es gibt keinen Wert, weil er überflüssig ist.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2017.08.16
  • www.mql5.com
Форум алго-трейдеров MQL5
 
typedef void (*fn)();
void f() {}
void OnStart()
{
        fn ff = f;                   //Результат:
        Print( "1:", typename( ff )); //void(*fn)()
        Print( "2:", typename( f  )); //пусто
}
Leer... warum?
 

Dateisuche: Suchbegriff: 'A\t\tB A'

Fehlende Tabulatorzeichen in der resultierenden Phrase: Suche nach 'AB A' im Ordner 'W:'.

Dies hat keinen Einfluss auf die Suchergebnisse, kann aber zu Verwirrung führen.



Поиск - Инструменты - Пользовательский интерфейс - Справка по MetaEditor
Поиск - Инструменты - Пользовательский интерфейс - Справка по MetaEditor
  • www.metatrader5.com
В данном окне отображаются результаты глобального поиска и поиска в файлах. Информация представляется в виде таблицы со следующими полями...
 
A100:
Leer... warum?
void f() {}
void f( int ) {}
 
ffxsaber:

Sie haben wieder eine Zweideutigkeit hinzugefügt

#ifdef __cplusplus
void f() {}
void f( int ) {}
void OnStart()
{
        void *ff = &f; //Error: E2336
}
#endif
als f allein war, gab es keine Zweideutigkeit
 
A100:

Sie haben wieder eine Zweideutigkeit hinzugefügt.

Solange es ein f gab, gab es keine Zweideutigkeit.

Ganz genau! Jetzt kann ich f alle möglichen Funktionen und eine Variable auf einmal aufrufen. Bei solchen Unklarheiten muss ein gewisser gesunder Menschenverstand walten, um keine Zufallsfehler zu verursachen. Meiner Meinung nach ist es logisch, eine leere Zeichenkette an typename f auszugeben, anstatt Probleme zu verursachen, wenn man versehentlich ein anderes f aufnimmt und definiert.

 
fxsaber:

Ganz genau! Jetzt kann ich f alle möglichen Funktionen und Variablen gleichzeitig aufrufen.

Vielleicht ist diese Möglichkeit also die Quelle für versteckte Fehler!

#ifdef __cplusplus
void f() {}
static char f; //Error: E2238 
#endif
 
A100:

Vielleicht ist das also die Quelle der versteckten Fehler!

Diese Möglichkeit gefällt mir! Man muss sich nur bewusst sein, was man tut.

 
fxsaber:

Übrigens... IsStopped() gibt ein bool zurück

void OnStart()
{
        Print( typename( IsStopped())); //bool
        Print(           IsStopped() ); //0
        Print( typename( _StopFlag  )); //int
}

Dieser Ausdruck verfälscht das Ergebnis (0 statt false). In jedem Fall liegt der Widerspruch nicht (nur) in der Dokumentation

https://www.mql5.com/ru/forum/1111/page1980#comment_5612130