Erros, bugs, perguntas - página 161

 
alexvd:

Qual foi a acção antes disso?

Será que a actualização ajuda?

Abriu o terminal após alguns dias de não utilização. Tenho esta fotografia. Depois utilizou o guião para carregar o histórico. Sem alterações. Esperou um par de horas. Agora está tudo bem.

 
Pode dizer-me onde posso descobrir quem tem o MT5 a funcionar com uma conta real?
 
void OnStart()
  {
//---
   int x,y = 0;
   Print("x++:");
   x = x++;
   Print("x=",x," y=",y);
   y = x++;
   Print("x=",x," y=",y);
  }

Pode explicar porquê de acordo com os resultados da corrida x==0 e y====1 ? Construir 342

PS. Deve ler ... x===1 e y==0 ...

 
Ashes:

Pode explicar porquê de acordo com os resultados da corrida x==0 e y====1 ? Construir 342

Verifique aqui https://www.mql5.com/ru/docs/basis/operations/mathoperation

O compilador não exibirá quaisquer erros ou avisos?

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

Pode explicar porquê de acordo com os resultados da corrida x==0 e y====1 ? Construir 342

Verificámos, o resultado é x=1, y=0

o primeiro incremento x=x++ decompõe-se em

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

 
Ashes:

Pode explicar porquê de acordo com os resultados da corrida x==0 e y====1 ? Construir 342

Sim, nós podemos. O que está em causa é a implementação de x = x+++;

Antes da pós-criação, o valor x é guardado numa variável temporária. Depois é realizado um incremento. Depois é feita uma atribuição a partir da variável temporária.

 
Lizar:

Veja aqui https://www.mql5.com/ru/docs/basis/operations/mathoperation

O compilador não apresenta quaisquer erros ou avisos?

O compilador MT5 engole-o silenciosamente! Não é compilado em MT4.

Por curiosidade, experimentei uma construção semelhante em C++ (do Visual Studio 2005) e o resultado para x e y é o mesmo.

 
Ashes:

Pode explicar porquê de acordo com os resultados da corrida x==0 e y====1 ? Construir 342

É necessário inicializar as variáveis antes de realizar operações de tapetes sobre elas. Se apenas a atribuir a uma variável não-inicializada, tudo ficará bem.

Contudo, é sempre uma boa ideia inicializar as variáveis para evitar problemas.

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

O compilador MT5 engole silenciosamente! Em MT4, a compilação falha.

Por curiosidade, tentei uma construção semelhante em C++ (do Visual Studio 2005) - o resultado para x e y é o mesmo.

Este lugar não está definido na norma c++ e é explicitamente declarado que depende da implementação. Há 2 implementações principais:

1. Realizar um pós-criação imediatamente após a utilização de uma variável numa expressão. (como nós fizemos).

2. Pós-incrementação depois de toda a expressão ser calculada.

 

Onde posso descobrir quais os corretores que correm MT5 em tempo real?