Errori, bug, domande - pagina 161

 
alexvd:

Qual era l'azione prima?

L'aggiornamento aiuta?

Aperto il terminale dopo alcuni giorni di non utilizzo. Ho questa foto. Poi ha usato lo script per caricare la storia. Nessun cambiamento. Ho aspettato un paio d'ore. Ora è tutto a posto.

 
Potete dirmi dove posso trovare chi ha la MT5 in funzione su un conto reale?
 
void OnStart()
  {
//---
   int x,y = 0;
   Print("x++:");
   x = x++;
   Print("x=",x," y=",y);
   y = x++;
   Print("x=",x," y=",y);
  }

Puoi spiegare perché secondo i risultati della corsa x==0 e y==1? Costruire 342

PS. Dovrebbe leggere ... x==1 e y==0 ...

 
Ashes:

Puoi spiegare perché secondo i risultati della corsa x==0 e y==1? Costruire 342

Controlla qui https://www.mql5.com/ru/docs/basis/operations/mathoperation

Il compilatore non mostra alcun errore o avvertimento?

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

Puoi spiegare perché secondo i risultati della corsa x==0 e y==1? Costruire 342

Abbiamo controllato, il risultato è x=1, y=0

il primo incremento x=x++ si scompone in

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

 
Ashes:

Puoi spiegare perché secondo i risultati della corsa x==0 e y==1? Costruire 342

Sì, possiamo. Si tratta dell'implementazione di x = x++;

Prima del postincremento, il valore x viene salvato in una variabile temporanea. Poi viene eseguito un incremento. Poi viene fatta un'assegnazione dalla variabile temporanea.

 
Lizar:

Guarda qui https://www.mql5.com/ru/docs/basis/operations/mathoperation

Il compilatore non mostra alcun errore o avvertimento?

Il compilatore MT5 lo inghiotte in silenzio! Non si compila in MT4.

Per curiosità, ho provato una costruzione simile in C++ (da Visual Studio 2005) e il risultato per x e y è lo stesso.

 
Ashes:

Puoi spiegare perché secondo i risultati della corsa x==0 e y==1? Costruire 342

È necessario inizializzare le variabili prima di eseguire operazioni mat su di esse. Se lo assegnate semplicemente a una variabile non inizializzata, tutto andrà bene.

Tuttavia, è sempre una buona idea inizializzare le variabili per evitare problemi.

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

Il compilatore MT5 inghiotte in silenzio! In MT4 la compilazione non riesce.

Per curiosità ho provato una costruzione simile in C++ (da Visual Studio 2005) - il risultato per x e y è lo stesso.

Questo posto non è definito nello standard c++ ed è esplicitamente dichiarato che dipende dall'implementazione. Ci sono 2 implementazioni principali:

1. Eseguire un postincremento immediatamente dopo aver usato una variabile in un'espressione. (come abbiamo fatto noi).

2. Postincremento dopo che l'intera espressione è stata calcolata.

 

Voglio dire, dove posso trovare quali broker eseguono MT5 in tempo reale?