Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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 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.
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.
Rashid, ce n'est pas vraiment la "conscience" du tout, ce sont les mathématiques.
Ok, définissons une telle fusion
Y a-t-il une garantie ici que la variable param sera initialisée ?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 ?
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)
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 ?
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 :
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.
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.