Errori, bug, domande - pagina 2209

 
Slava:

E perché i suoi esempi sono puramente teorici. Sono puramente per studenti. Nessun programmatore sano di mente metterebbe queste cose in produzione.

L'incremento e il decremento del prefisso e del postfisso sono usati prima di tutto nei cicli. E si chiamano incrementi e decrementi!

Ecco alcuni esempi

и

Se sostenete che le operazioni di prefisso e postfisso funzionano allo stesso modo, allora bandiera in mano e tamburo sul collo.

Nel caso dell'incremento del prefisso, otterrete un elemento dell'array nullo non inizializzato e un errore di array fuori portata all'ultima iterazione.

Forse la tua mente alta non lo capisce, ripeterò la mia domanda ancora una volta.

а при чем тут array[++i]=i и array[i++]=i, как я могу сравнить то, чего не было в беседе...

Quello evidenziato è difficile da vedere per te?

Ora al punto, perché nell'esempio che appare nella conversazione, il risultato in mql == 12 e non importa se è stato fatto a mano o no, se c'è una differenza nelle operazioni postfix e prefix, il risultato dovrebbe essere == 13

ps. e non sto facendo una dichiarazione, perché ora ho controllato e davvero ha fatto postfix e prefisso ora hanno una differenza, ma la mia domanda sopra dà ragione di credere che le ambiguità nel linguaggio a tempo di compilazione apparentemente abbastanza e prima di balzare su qualcuno nel ramo, trattare con questi UB, non siamo in colpa qui

A proposito, vedo che l'aiuto è già stato armeggiato ))

 
Konstantin:

Forse la tua mente alta non lo capisce, ripeterò di nuovo la mia domanda.

non capisci la parte evidenziata, vero?

ora al punto, perché nell'esempio che appare nella conversazione, il risultato in mql == 12 e non importa se è fatto a mano o no, quando la differenza nelle operazioni postfix e prefix, il risultato dovrebbe essere == 13

ps. e non sto facendo una dichiarazione, perché ora ho controllato e davvero fare postfix e prefisso ora hanno una differenza, ma la mia domanda sopra dà ragione di credere che le ambiguità nel linguaggio a tempo di compilazione apparentemente abbastanza e prima di balzare su qualcuno nel ramo, trattare con questi UB, non siamo in colpa qui

A proposito, l'aiuto sembra che sia stato spalato in giro).

Non essere sarcastico.

Chi dice che i risultati devono essere 13? Anche in questo caso, i risultati con effetti collaterali dipendono molto dall'ottimizzazione. Anche se non si applica l'ottimizzazione a tale espressione, entra in gioco un'implementazione - un cambiamento nel valore della variabile o immediatamente dopo averla usata o dopo aver calcolato l'espressione. Quale implementazione è corretta?

Non ci occuperemo di UB, che è indefinito, e ha scritto chiaramente: "Non fatelo.

Dove è stato copiato l'aiuto? Ho aperto il riferimento MQL5 da MetaEditor build 1755 del 18 gennaio. Dice la stessa cosa

Avvisoimportante

int i=5;
int k = i++ + ++i;

Possono verificarsi problemi di calcolo quando si sposta l'espressione di cui sopra da un ambiente di programmazione a un altro (per esempio, da Borland C++ a MQL5). In generale, l'ordine dei calcoli dipende dall'implementazione del compilatore. In pratica, ci sono due modi per implementare il post-decremento:

  1. Il post-decremento (post-incremento) viene applicato alla variabile dopo aver calcolato l'intera espressione.
  2. Il post-decremento (post-incremento) viene applicato alla variabile immediatamente all'operazione.

Attualmente il primo modo di calcolo post-decremento è implementato in MQL5. Ma anche conoscendo questa peculiarità, non si consiglia di sperimentare il suo uso.


La tua affermazione originale era che non c'è differenza tra operazioni postfix e prefix. Non c'è?

 
Slava:

Non siate frivoli.

Chi dice che i risultati devono essere 13? Anche in questo caso, i risultati con effetti collaterali dipendono molto dall'ottimizzazione. Anche se non si applica l'ottimizzazione a tale espressione, entra in gioco un'implementazione - un cambiamento nel valore della variabile o subito dopo averla usata o dopo aver calcolato l'espressione. Quale implementazione è corretta?

Non abbiamo intenzione di occuparci di UB, per questo è indefinito, e abbiamo detto esplicitamente "non fatelo".

Dove sei andato nel riferimento? Ho aperto il riferimento MQL5 da MetaEditor build 1755 del 18 gennaio. Dice la stessa cosa

Avvisoimportante

int i=5;
int k = i++ + ++i;

Possono verificarsi problemi di calcolo quando si sposta l'espressione di cui sopra da un ambiente di programmazione a un altro (per esempio, da Borland C++ a MQL5). In generale, l'ordine dei calcoli dipende dall'implementazione del compilatore. In pratica, ci sono due modi per implementare il post-decremento:

  1. Il post-decremento (post-incremento) viene applicato alla variabile dopo aver calcolato l'intera espressione.
  2. Il post-decremento (post-incremento) viene applicato alla variabile immediatamente all'operazione.

Attualmente il primo modo di calcolo post-decremento è implementato in MQL5. Ma anche conoscendo questa peculiarità, non si raccomanda di sperimentare il suo uso.


La tua affermazione originale era che non c'è differenza tra operazioni postfix e prefix. Non è così?

Non sono sfacciato, nota dove hai iniziato il dialogo, cioè ho dovuto eseguire un codice che non conoscevo nemmeno - super

per quanto riguarda l'aiuto - sì, è stato revisionato perché quando avevo a che fare (circa due anni fa) con operazioni postfix e prefix in mql, ovviamente non ricordo questo materiale ora

Quindi, l'argomento era chiuso, e abbiamo introdotto questa differenza e l'abbiamo fatto bene, ma devi avvertirli che stai cambiando

 
. ... Rick D. ... .:
Si prega di consigliare la chiusura parziale della posizione, tipo di conto RETAIL_HEDGING. Per esempio, chiudo metà di una posizione in Expert Advisor e un nuovo ordine con un lotto più piccolo dovrebbe aprirsi automaticamente. Quindi, a che punto il nuovo ordine è garantito nel terminale? Ho capito bene che non deve apparire immediatamente dopo il PositionClosePartial e dobbiamo prenderlo da qualche parte in OnTrade?
Lasciatemi provare a rispondere alla mia stessa domanda. Quando si chiama PositionClosePartial, il ticket di un ordine chiuso tornerà a CTrade::ResultOrder(), e il ticket della posizione rimane lo stesso, ma la posizione stessa avrà un lotto più piccolo. Proviamo a concludere che la chiamata di PositionClosePartial porta a una diminuzione sincrona della posizione e al cambiamento della storia dell'ordine in una transazione.
 

Che diavolo è quella cosa?

2018.05.15 12:50:04.594 Pred_Find (GBPUSD,M1)   Access violation at 0x000000013F1C4945 read to 0xFFFFFFFFFFFFFFFF
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48A0 48895 C2418        mov        [rsp+0x18], rbx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48A5 48897 C2420        mov        [rsp+0x20], rdi
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48AA 4156              push       r14
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48AC 4883 EC20          sub        rsp, 0x20
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48B0 488 BDA            mov        rbx, rdx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48B3 4 C8BF1            mov        r14, rcx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48B6 4883 FA20          cmp        rdx, 0x20
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48BA 7307              jae        0x13f1c48c3
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48BC BB20000000        mov        ebx, 0x20
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48C1 EB13              jmp        0x13f1c48d6
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48C3 488 BCB            mov        rcx, rbx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48C6 83 E107            and        ecx, 0x7
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48C9 740 B              jz         0x13f1c48d6
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48CB B808000000        mov        eax, 0x8
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48D0 482 BC1            sub        rax, rcx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48D3 4803 D8            add        rbx, rax
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013 F1C48D6 498 B4620          mov        rax, [r14+0x20]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48DA 33 FF              xor        edi, edi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48DC 4885 C0            test       rax, rax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48DF 0 F8485000000      jz         dword 0x13f1c496a
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48E5 483 B58F8          cmp        rbx, [rax-0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48E9 7616              jbe        0x13f1c4901
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48EB 488 B5008          mov        rdx, [rax+0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48EF 33 C0              xor        eax, eax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48F1 0 FB6CA            movzx      ecx, dl
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48F4 4883 E2FC          and        rdx, 0xfc
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48F8 80 E102            and        cl, 0x2
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48FB 480 F44C2          cmovz      rax, rdx
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C48FF EB0E              jmp        0x13f1c490f
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4901 488 BF8            mov        rdi, rax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4904 488 B00            mov        rax, [rax]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4907 A802              test       al, 0x2
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4909 7509              jnz        0x13f1c4914
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C490B 4883 E0FC          and        rax, 0xfc
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C490F 4885 C0            test       rax, rax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4912 75 D1              jnz        0x13f1c48e5
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4914 4885 FF            test       rdi, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4917 7451              jz         0x13f1c496a
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4919 488 BD7            mov        rdx, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C491C 498 D4E18          lea        rcx, [r14+0x18]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4920 E89B0F0000        call       0x13f1c58c0  ; #5079 (terminal64.exe)
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4925 4 C8B47F8          mov        r8, [rdi-0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4929 4 C2BC3            sub        r8, rbx
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C492C 4983 F820          cmp        r8, 0x20
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4930 7224              jb         0x13f1c4956
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4932 4983 C0F8          add        r8, 0xf8
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4936 488 D5308          lea        rdx, [rbx+0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C493A 4803 D7            add        rdx, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C493D 498 D4E18          lea        rcx, [r14+0x18]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4941 4 C8942F8          mov        [rdx-0x8], r8
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)      crash -->  000000013 F1C4945 4 D894410F8        mov        [r8+rdx-0x8], r8
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C494A 48895 FF8          mov        [rdi-0x8], rbx
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C494E 4 D8B4618          mov        r8, [r14+0x18]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4952 41 FF5008          call       qword near [r8+0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4956 488 BC7            mov        rax, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C4959 488 B5C2440        mov        rbx, [rsp+0x40]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013 F1C495E 488 B7C2448        mov        rdi, [rsp+0x48]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   00: 0x000000013F1C4945
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   01: 0x000000013F63EA90
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   02: 0x00000000FFFFFFFF
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   03: 0x000000005A3CD7A0
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   04: 0x000000013F6303ED
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
 
Konstantin:

\sull'aiuto - sì, è stato pesantemente rimaneggiato, perché quando avevo a che fare (circa due anni fa) con operazioni postfix e prefix in mql, ovviamente non ricordo questo materiale ora

in generale, l'argomento era chiuso, e abbiamo introdotto questa differenza e l'abbiamo fatto bene, ma bisogna avvertirli dei cambiamenti, no?

Per amore dell'interesse ho deciso di controllare la vecchia build 1159 del giugno 2015. Il suo aiuto ha tutto quello che Slava ha citato. Quindi forse hai fatto un po' di confusione.

 
Aleksey Vyazmikin:

Che diavolo è quella cosa?

È un incidente:) Vai a servicedesk!

 
Alexey Kozitsyn:

È un incidente:) Vai a servicedesk!

Preso - ha rotto la banca :)

 
Aleksey Vyazmikin:

Vedo - ha rotto il banco :)

Succede)

 
Alexey Kozitsyn:

Succede)

Non so come localizzare questo errore? È solo che non voglio dare via l'intero script, e non voglio ri-confezionare tutto....