Erreurs, bugs, questions - page 1964

 
fxsaber:

Veuillez expliquer le type de. Je n'ai pas trouvé de bonne explication pour les programmeurs inexpérimentés.

J'ai supprimé ces lignes (accidentellement).

Vous avez https://www.mql5.com/ru/forum/1111/page1983#comment_5616331 une entrée similaire comme celle-ci

template<typename T>
void g( T Value ) { Print(typename(Value)); }
Différence insignifiante : il n'y a pas de valeur, car elle est redondante.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 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  )); //пусто
}
Vide... pourquoi ?
 

Recherche de fichiers: Chaîne de recherche : 'A\t\tB A'.

Caractères de tabulation manquants dans la phrase résultante : Recherche de 'AB A' dans le dossier 'W:'.

N'affecte pas les résultats de la recherche, mais peut prêter à confusion.



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

Vous avez encore ajouté de l'ambiguïté

#ifdef __cplusplus
void f() {}
void f( int ) {}
void OnStart()
{
        void *ff = &f; //Error: E2336
}
#endif
quand j'étais seul, il n'y avait aucune ambiguïté.
 
A100:

Vous avez encore ajouté de l'ambiguïté.

tant qu'il y avait un seul F, il n'y avait pas d'ambiguïté.

Exactement ! Maintenant je peux appeler toutes sortes de fonctions et une variable en même temps. Il doit y avoir un certain bon sens dans ces ambiguïtés, afin de ne pas provoquer d'erreurs aléatoires. À mon avis, il est logique d'embobiner en émettant une chaîne vide à typename f, plutôt que de causer des problèmes lorsque vous prenez et définissez accidentellement un autre f.

 
fxsaber:

Exactement ! Maintenant, je peux appeler toutes sortes de fonctions et de variables à la fois.

Cette possibilité est donc peut-être la source d'erreurs cachées !

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

Alors peut-être que c'est la source des bugs cachés !

J'aime cette possibilité ! Il faut juste être conscient de ce que l'on fait.

 
fxsaber:

D'ailleurs... IsStopped() renvoie un bool

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

Cette impression fausse le résultat (0 au lieu de faux). En tout cas, la contradiction ne se trouve pas (seulement) dans la documentation.

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

 
fxsaber:

Exactement ! Maintenant, je peux appeler toutes sortes de fonctions et de variables à la fois. Ces ambiguïtés doivent être empreintes de bon sens, afin de ne pas provoquer d'erreurs accidentelles. À mon avis, il est logique d'embobiner en émettant une chaîne vide à typename f, plutôt que de causer des problèmes lorsque vous prenez et définissez accidentellement un autre f.

Ne vous entêtez pas à chercher le bon sens partout, surtout chez les insectes. Si vous vous écoutez, tout bug dans MQL n'est pas un bug du tout, mais une fonctionnalité qui a été incluse par les sages développeurs ;))

Comme nous l'avons déjà indiqué, si vous avez le moindre doute, la première chose à faire est de le vérifier en C++, puis de trouver une solution.

Quant aux ambiguïtés, elles devraient provoquer une erreur de compilation et ne poser aucun problème. Tout était clair et sans ambiguïté dans l'échantillon A100, donc je ne comprends pas bien ce que vous voulez dire. Si vous devez surcharger une fonction, vous la surchargez, vous corrigez les erreurs de compilation dans les ambiguïtés et c'est tout.