Erreurs, bugs, questions - page 161

 
alexvd:

Quelle était l'action avant cela ?

La mise à jour est-elle utile ?

J'ai ouvert le terminal après quelques jours de non-utilisation. J'ai cette photo. Puis j'ai utilisé le script pour télécharger l'historique. Pas de changement. J'ai attendu quelques heures. Tout va bien maintenant.

 
Pouvez-vous me dire où je peux trouver qui a le MT5 en fonctionnement sur un compte réel ?
 
void OnStart()
  {
//---
   int x,y = 0;
   Print("x++:");
   x = x++;
   Print("x=",x," y=",y);
   y = x++;
   Print("x=",x," y=",y);
  }

Pouvez-vous expliquer pourquoi, selon les résultats de l'exécution, x==0 et y==1 ? Construction 342

PS. Il faut lire ... x==1 et y==0 ...

 
Ashes:

Pouvez-vous expliquer pourquoi, selon les résultats de l'exécution, x==0 et y==1 ? Construction 342

Consultez le site https://www.mql5.com/ru/docs/basis/operations/mathoperation

Le compilateur n'affiche pas d'erreurs ou d'avertissements ?

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Основы языка / Операции и выражения / Арифметические операции - Документация по MQL5
 
Ashes:

Pouvez-vous expliquer pourquoi, selon les résultats de l'exécution, x==0 et y==1 ? Construction 342

Nous avons vérifié, le résultat est x=1, y=0.

le premier incrément x=x++ se décompose en

t=x;  // x=0
x++;  // x=1
x=t;  // x=0

 
Ashes:

Pouvez-vous expliquer pourquoi, selon les résultats de l'exécution, x==0 et y==1 ? Construction 342

Oui, nous le pouvons. Il s'agit de la mise en œuvre de x = x++ ;

Avant la postincrémentation, la valeur x est enregistrée dans une variable temporaire. Ensuite, un incrément est effectué. Ensuite, une affectation est effectuée à partir de la variable temporaire.

 
Lizar:

Regardez ici https://www.mql5.com/ru/docs/basis/operations/mathoperation

Le compilateur n'affiche pas d'erreurs ou d'avertissements ?

Le compilateur MT5 l'avale en silence ! Il ne compile pas dans MT4.

Par curiosité, j'ai essayé une construction similaire en C++ (à partir de Visual Studio 2005) et le résultat pour x et y est le même.

 
Ashes:

Pouvez-vous expliquer pourquoi, selon les résultats de l'exécution, x==0 et y==1 ? Construction 342

Vous devez initialiser les variables avant d'effectuer des opérations sur elles. Si vous l'assignez simplement à une variable non initialisée, tout ira bien.

Cependant, c'est toujours une bonne idée d'initialiser les variables pour éviter les problèmes.

void OnStart()
  {
//---
   int x=0,y = 0;
   Print("x++:");
   x++;
   Print("x=",x," y=",y);
   y=x;
   Print("x=",x," y=",y);
  }
 
Ashes:

Le compilateur MT5 avale en silence ! Dans MT4, la compilation échoue.

Par curiosité, j'ai essayé une construction similaire en C++ (à partir de Visual Studio 2005) - le résultat pour x et y est le même.

Cet endroit n'est pas défini dans la norme c++ et il est explicitement indiqué qu'il dépend de l'implémentation. Il existe deux implémentations principales :

1. Effectuer une postincrémentation immédiatement après avoir utilisé une variable dans une expression. (comme nous l'avons fait).

2. Postincrément après le calcul de l'expression entière.

 

Je veux dire, où puis-je trouver les courtiers qui utilisent MT5 en temps réel ?