Errores, fallos, preguntas - página 2209

 
Slava:

Y porque sus ejemplos son puramente teóricos. Son exclusivamente para estudiantes. Ningún programador en su sano juicio pondría esas cosas en producción.

Los incrementos y decrementos postfijados y prefijados se utilizan en primer lugar en los bucles. Y se llaman incrementos y decrementos.

He aquí algunos ejemplos

и

Si afirma que las operaciones de prefijo y postfijo funcionan igual, entonces bandera en mano y tambor en el cuello.

En el caso del incremento del prefijo, obtendrá un elemento de matriz nulo no inicializado y un error de matriz fuera de rango en la última iteración.

Tal vez tu mente elevada no lo entienda, voy a repetir mi pregunta una vez más.

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

¿Le resulta difícil ver el resaltado?

Ahora al grano, por qué en el ejemplo que aparece en la conversación, el resultado en mql == 12 y no importa si se hizo a mano o no, cuando hay una diferencia en las operaciones postfix y prefix, el resultado debería ser == 13

ps. y no estoy haciendo una declaración, porque ahora he comprobado y realmente hacer postfix y prefijo ahora tienen una diferencia, pero mi pregunta anterior da razones para creer que las ambigüedades en el lenguaje en tiempo de compilación aparentemente suficiente y antes de saltar sobre alguien en la rama, tratar con estos UB, no estamos en falta aquí

Por cierto, veo que la ayuda ya ha sido retocada )).

 
Konstantin:

Tal vez tu mente elevada no lo entienda, voy a repetir mi pregunta de nuevo.

¿no entiendes la parte resaltada?

ahora al grano, por qué en el ejemplo que aparece en la conversación, el resultado en mql == 12 y no importa si se hace a mano o no, cuando la diferencia en las operaciones postfix y prefix, el resultado debería ser == 13

ps. y no estoy haciendo una declaración, porque ahora he comprobado y realmente hacer postfix y prefijo ahora tienen una diferencia, pero mi pregunta anterior da razones para creer que las ambigüedades en el lenguaje en tiempo de compilación aparentemente suficiente y antes de saltar sobre alguien en la rama, tratar con estos UB, no estamos en falta aquí

Por cierto, la ayuda parece que se ha llevado a cabo con una pala).

No seas sarcástico.

¿Quién dice que los resultados tienen que ser 13? De nuevo, los resultados con efectos secundarios dependen en gran medida de la optimización. Aunque no se aplique la optimización a una expresión de este tipo, entra en juego una implementación: un cambio en el valor de la variable, ya sea inmediatamente después de usarla o después de calcular la expresión. ¿Qué aplicación es la correcta?

No vamos a ocuparnos de la UB, que no está definida, y escribimos claramente: "No hagas eso".

¿Dónde se ha copiado la ayuda? He abierto la referencia MQL5 del MetaEditor build 1755 del 18 de enero. Dice lo mismo

Avisoimportante

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

Pueden surgir problemas de cálculo al trasladar la expresión anterior de un entorno de programación a otro (por ejemplo, de Borland C++ a MQL5). En general, el orden de los cálculos depende de la implementación del compilador. En la práctica, hay dos formas de aplicar la posdecreción:

  1. El post-decremento (post-incremento) se aplica a la variable después de calcular toda la expresión.
  2. El post-decremento (post-incremento) se aplica a la variable inmediatamente en la operación.

En la actualidad, la primera forma de cálculo de post-decremento está implementada en MQL5. Pero aún conociendo esta peculiaridad, no se recomienda experimentar con su uso.


Tu afirmación original era que no hay diferencia entre las operaciones postfijas y las prefijas. ¿No es así?

 
Slava:

No seas frívolo.

¿Quién dice que los resultados tienen que ser 13? De nuevo, los resultados con efectos secundarios dependen en gran medida de la optimización. Aunque no se aplique la optimización a una expresión de este tipo, entra en juego una implementación: un cambio en el valor de la variable justo después de usarla o después de calcular la expresión. ¿Qué aplicación es la correcta?

No vamos a tratar con UB, por eso es indefinido, y dijimos explícitamente "no lo hagas".

¿A dónde fuiste en la referencia? He abierto la referencia MQL5 del MetaEditor build 1755 del 18 de enero. Dice lo mismo

Avisoimportante

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

Pueden surgir problemas de cálculo al trasladar la expresión anterior de un entorno de programación a otro (por ejemplo, de Borland C++ a MQL5). En general, el orden de los cálculos depende de la implementación del compilador. En la práctica, hay dos formas de aplicar la posdecreción:

  1. El post-decremento (post-incremento) se aplica a la variable después de calcular toda la expresión.
  2. El post-decremento (post-incremento) se aplica a la variable inmediatamente en la operación.

En la actualidad, la primera forma de cálculo de post-decremento está implementada en MQL5. Pero aún conociendo esta peculiaridad, no se recomienda experimentar con su uso.


Tu afirmación original era que no hay diferencia entre las operaciones postfijas y las prefijas. ¿No es así?

No estoy siendo descarado, fíjate por dónde has empezado el diálogo, es decir, he tenido que ejecutar un código que ni siquiera conocía - super

en cuanto a la ayuda - sí, es una revisión importante porque cuando me ocupaba (hace unos dos años) de las operaciones de postfix y prefijo en mql, obviamente no recuerdo este material ahora

así, el tema estaba cerrado, y hemos introducido esta diferencia y lo hemos hecho bien, pero hay que advertirles que estás cambiando

 
. ... Rick D. ... .:
Por favor, asesore sobre el cierre parcial de la posición, tipo de cuenta RETAIL_HEDGING. Por ejemplo, cierro la mitad de una posición en Expert Advisor y una nueva orden con un lote menor debería abrirse automáticamente. Entonces, ¿en qué momento se garantiza que la nueva orden esté en la terminal? ¿Entiendo bien que no tiene que aparecer inmediatamente después del PositionClosePartial y que tenemos que cogerlo en algún lugar del OnTrade?
Permítanme que intente responder a mi propia pregunta. Al llamar a PositionClosePartial, el ticket de una orden cerrada volverá a CTrade::ResultOrder(), y el ticket de la posición sigue siendo el mismo, pero la posición en sí tendrá un lote más pequeño. Intentemos concluir que la llamada de PositionClosePartial conduce a una disminución sincrónica de la posición y al cambio del historial de órdenes en una sola transacción.
 

¿Qué demonios es esa 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:

\sobre la ayuda - sí, ha sido fuertemente refrito, porque cuando yo estaba tratando (hace unos dos años) con las operaciones de postfix y prefijo en mql, obviamente no recuerdo este material ahora

en general, el tema estaba cerrado, y hemos introducido esta diferencia y lo hemos hecho bien, pero hay que advertirles de los cambios, ¿no?

Por interés decidí revisar la antigua build 1159 de junio de 2015. Su ayuda tiene todo lo que citó Slava. Así que tal vez tengas algo mezclado.

 
Aleksey Vyazmikin:

¿Qué demonios es esa cosa?

Es un choque:) ¡Vaya a servicedesk!

 
Alexey Kozitsyn:

Es un choque:) ¡Vaya a servicedesk!

Lo tengo - rompió el banco :)

 
Aleksey Vyazmikin:

Ya veo - rompió el banco :)

Así es)

 
Alexey Kozitsyn:

Así es)

¿No sé cómo localizar este error? No quiero revelar todo el guión, y no quiero volver a empaquetar todo....