Erreurs, bugs, questions - page 312

 
Academic:

Cet avertissement ne devrait pas être donné, car la fonction ObjectGetDouble transmet une référence et l'instruction if vérifie la vérité retournée par les deux appels, et donc seulement si les deux fonctions retournent vrai alors ces variables sont traitées, ce qui signifie que les deux variables ne peuvent pas ne pas être définies à la valeur correcte.


Le compilateur ne s'étend pas tellement pour s'assurer que ces variables seront nécessairement initialisées à la suite d'un appel à ObjectGetDouble. Essayez plutôt d'en écrire un vous-même, où la valeur du paramètre d'entrée passé par référence sera définie explicitement. Que dira le compilateur ?
 
Rosh:
Le compilateur ne s'étend pas assez pour s'assurer que ces variables seront nécessairement initialisées à la suite d'un appel ObjectGetDouble. Essayez plutôt d'écrire le vôtre, où la valeur du paramètre d'entrée passé par référence sera définie explicitement. Que dira le compilateur ?


Rashid, ce n'est pas vraiment la "conscience" du tout, ce sont les mathématiques.

 
Academic:


Rashid, ce n'est pas vraiment la "conscience" du tout, ce sont les mathématiques.

1. Il existe une chose telle que "l'évaluation raccourcie des expressions logiques".

2. Le compilateur ne peut pas savoir avec certitude si la variable passée par référence sera remplie.

3. Un avertissement n'est que cela, un avertissement pour attirer votre attention sur la possibilité d'un problème.

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
Academic:


Rashid, ce n'est pas vraiment la "conscience" du tout, ce sont les mathématiques.

Ok, définissons une telle fusion

bool AlwaysGood( double & param)
  {
   return true;
  }
Y a-t-il une garantie ici que la variable param sera initialisée ?
 
Rosh:

Ok, définissons une telle ffruncture

Y a-t-il une garantie que la variable param sera initialisée ?

Il s'agit d'une fonction dans laquelle le résultat "param" n'est PAS modifié. Donc ici, l'avertissement devrait être donné à 1000% :)

La solution standard ici est la suivante : s'il existe une branche d'exécution du code où la valeur ne peut pas être modifiée, on considère que cette fonction ne modifie pas la valeur. Et cela va générer un avertissement.

Rashid, voulez-vous que je prenne n'importe lequel des compilateurs C++ et C modernes et que je compile ce code ? Je suis sûr qu'aucun d'entre eux ne donnera un avertissement de gauche.

De plus, si vous avez de tels "problèmes" de détection, vous commencez soudainement à douter fortement de l'absence d'optimisation en tant que telle. Ou est-ce qu'il y en a ?

 
Academic:

Rashid, vous voulez que je prenne n'importe lequel des compilateurs C++ et C modernes et que je compile un code similaire et je suis sûr qu'aucun d'entre eux ne donnera un faux avertissement.

Pourquoi on se dispute ? On ne met pas...

PS Il y aura bien un message (peut-être quelques lignes en dessous)

 
Academic:

Ce n'est clairement pas une amélioration, surtout s'il y a de tels "problèmes" avec la détection de ces choses, alors un GROS doute s'installe sur le fait qu'il n'y a pas d'optimisation en tant que telle. Ou est-ce qu'il y en a ?

Lafonction ObjectGetDouble échappe au contrôle du compilateur parce qu'elle a une implémentation indépendante (c'est-à-dire en bibliothèque).
Документация по MQL5: Графические объекты / ObjectGetDouble
Документация по MQL5: Графические объекты / ObjectGetDouble
  • www.mql5.com
Графические объекты / ObjectGetDouble - Документация по MQL5
 
Academic:


Si vous regardez l'aide pour ObjectGetDouble:


Renvoie vrai ou faux en fonction du succès de la fonction. En cas de succès, la valeur de la propriété est placée dans la variable de destination, passée par référence par le dernier paramètre.


Nous concluons donc que le remplissage de la variable de réception n'est pas garanti en cas d'erreur. C'est pourquoi le message du compilateur est valable.

IMHO.

 

Quelque chose n'est pas synchronisé dans la dernière version.

Je fais une petite évaluation environnementale :

int OnInit()
  {
   Print("Все нормально!"); 
   return(0);
  }

Exécution du testeur,

2011.02.22 11:54:21 Core 1 2011.02.07 00:00:00 Tout est OK !

J'apporte des modifications à mon EA :

int OnInit()
  {
   Print("Тестер, Аууу, ты где?"); 
   return(0);
  }

Je le compile, je lance le testeur, il répond :

2011.02.22 11:57:55 Core 1 2011.02.07 00:00:00 Tout est normal !

Il suffit de redémarrer le terminal.

 
Serj_Che:

Quelque chose n'est pas synchronisé dans la dernière version.

Je fais une petite évaluation environnementale :

Exécution du testeur,

2011.02.22 11:54:21 Core 1 2011.02.07 00:00:00 Tout est OK !

J'apporte des modifications à mon EA :

Je le compile, je lance le testeur, il répond :

2011.02.22 11:57:55 Core 1 2011.02.07 00:00:00 Tout est normal !

Il suffit de redémarrer le terminal.

Désolé. Une nouvelle version sera publiée aujourd'hui ou demain sans cette malheureuse erreur.
Raison: