Fehler, Irrtümer, Fragen - Seite 2209

 
Slava:

Und weil Ihre Beispiele rein theoretisch sind. Sie sind ausschließlich für Studenten bestimmt. Kein Programmierer, der bei Verstand ist, würde so etwas in die Produktion einbringen.

Postfix- und Präfixinkremente und -dekremente werden eigentlich vor allem in Schleifen verwendet. Und die heißen Inkremente und Dekremente!

Hier sind einige Beispiele

и

Wenn Sie behaupten, dass Präfix- und Postfix-Operationen gleich funktionieren, dann haben Sie die Fahne in der Hand und die Trommel im Nacken.

Im Falle eines Präfix-Inkrements erhalten Sie bei der letzten Iteration ein nicht initialisiertes Null-Array-Element und einen Array-Out-of-Range-Fehler.

Vielleicht versteht Ihr hoher Geist es nicht, dann wiederhole ich meine Frage noch einmal.

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

Ist die hervorgehobene Stelle für Sie schwer zu erkennen?

Nun zu dem Punkt, warum in dem Beispiel, das in der Konversation erscheint, das Ergebnis in mql == 12 ist, und es spielt keine Rolle, ob es aus der Hand gemacht wurde oder nicht, wenn es einen Unterschied zwischen Postfix- und Präfix-Operationen gibt, sollte das Ergebnis == 13 sein

ps. und ich mache keine Aussage, weil ich jetzt überprüft und wirklich Postfix und Präfix haben jetzt einen Unterschied, aber meine Frage oben gibt Grund zu der Annahme, dass die Mehrdeutigkeiten in der Sprache bei der Kompilierung Zeit offenbar genug und bevor Sie auf jemanden in der Branche zu stürzen, mit diesen UB beschäftigen, sind wir nicht schuld hier

Übrigens, wie ich sehe, wurde an der Hilfe bereits herumgebastelt )).

 
Konstantin:

Vielleicht versteht Ihr hoher Geist es nicht, dann wiederhole ich meine Frage noch einmal.

Sie verstehen den hervorgehobenen Teil nicht?

Nun zu dem Punkt, warum in dem Beispiel, das in der Konversation auftaucht, das Ergebnis in mql == 12 ist, und es spielt keine Rolle, ob es aus der Hand gemacht wurde oder nicht, wenn es einen Unterschied zwischen Postfix- und Präfixoperationen gibt, sollte das Ergebnis == 13 sein

ps. und ich mache keine Aussage, weil ich jetzt überprüft und wirklich Postfix und Präfix haben jetzt einen Unterschied, aber meine Frage oben gibt Grund zu der Annahme, dass die Mehrdeutigkeiten in der Sprache bei der Kompilierung Zeit offenbar genug und bevor Sie auf jemanden in der Branche zu stürzen, mit diesen UB beschäftigen, sind wir nicht schuld hier

Übrigens, die Hilfe sieht aus, als wäre sie umgeschaufelt worden).

Sei nicht schnippisch.

Wer sagt, dass die Ergebnisse 13 sein müssen? Auch hier sind die Ergebnisse mit Nebenwirkungen stark von der Optimierung abhängig. Selbst wenn Sie auf einen solchen Ausdruck keine Optimierung anwenden, kommt eine Implementierung ins Spiel - eine Änderung des Variablenwerts entweder unmittelbar nach der Verwendung oder nach der Berechnung des Ausdrucks. Welche Umsetzung ist richtig?

Wir werden uns nicht mit UB beschäftigen, das ist undefiniert, und haben klar geschrieben: "Tu das nicht.

Wo ist die Hilfe kopiert worden? Ich habe die MQL5-Referenz von MetaEditor Build 1755 vom 18. Januar geöffnet. Er sagt das Gleiche

Wichtiger Hinweis

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

Bei der Übertragung des obigen Ausdrucks von einer Programmierumgebung in eine andere (z. B. von Borland C++ nach MQL5) können Rechenprobleme auftreten. Im Allgemeinen hängt die Reihenfolge der Berechnungen von der Implementierung des Compilers ab. In der Praxis gibt es zwei Möglichkeiten, die Nachdeklination durchzuführen:

  1. Die Nachdekrementierung (Nachinkrementierung) wird auf die Variable angewandt, nachdem der gesamte Ausdruck berechnet wurde.
  2. Die Nachdekrementierung (Nachinkrementierung) wird unmittelbar bei der Operation auf die Variable angewendet.

Derzeit ist in MQL5 die erste Art der Nachdeklinationsberechnung implementiert. Aber auch wenn man diese Besonderheit kennt, ist es nicht empfehlenswert, mit seiner Verwendung zu experimentieren.


Ihre ursprüngliche Aussage war, dass es keinen Unterschied zwischen Postfix- und Präfix-Operationen gibt. Nicht wahr?

 
Slava:

Seien Sie nicht leichtsinnig.

Wer sagt, dass die Ergebnisse 13 sein müssen? Auch hier sind die Ergebnisse mit Nebenwirkungen stark von der Optimierung abhängig. Selbst wenn Sie auf einen solchen Ausdruck keine Optimierung anwenden, kommt eine Implementierung ins Spiel - eine Änderung des Variablenwerts entweder direkt nach der Verwendung oder nach der Berechnung des Ausdrucks. Welche Umsetzung ist richtig?

Wir werden uns nicht mit UB befassen, deshalb ist es undefiniert, und wir haben ausdrücklich gesagt, dass wir das nicht tun.

Wohin sind Sie mit der Referenz gegangen? Ich habe die MQL5-Referenz von MetaEditor Build 1755 vom 18. Januar geöffnet. Er sagt das Gleiche

Wichtiger Hinweis

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

Bei der Übertragung des obigen Ausdrucks von einer Programmierumgebung in eine andere (z. B. von Borland C++ nach MQL5) können Rechenprobleme auftreten. Im Allgemeinen hängt die Reihenfolge der Berechnungen von der Implementierung des Compilers ab. In der Praxis gibt es zwei Möglichkeiten, die Nachdeklination durchzuführen:

  1. Die Nachdekrementierung (Nachinkrementierung) wird auf die Variable angewandt, nachdem der gesamte Ausdruck berechnet wurde.
  2. Die Nachdekrementierung (Nachinkrementierung) wird unmittelbar bei der Operation auf die Variable angewendet.

Derzeit ist in MQL5 die erste Art der Nachdeklinationsberechnung implementiert. Aber auch wenn man diese Besonderheit kennt, ist es nicht empfehlenswert, mit seiner Verwendung zu experimentieren.


Ihre ursprüngliche Aussage war, dass es keinen Unterschied zwischen Postfix- und Präfix-Operationen gibt. Ist es nicht so?

Ich bin nicht frech, beachten Sie, wo Sie den Dialog begonnen haben, d.h. ich musste einen Code ausführen, von dem ich nicht einmal wusste - super

was die Hilfe betrifft - ja, sie wurde überarbeitet, denn als ich mich (vor etwa zwei Jahren) mit Postfix- und Präfix-Operationen in mql beschäftigte, erinnere ich mich offensichtlich nicht mehr an dieses Material

Das Thema war also abgeschlossen, und wir haben diesen Unterschied eingeführt und gut gemacht, aber man muss sie warnen, dass man etwas ändert.

 
. ... Rick D. ... .:
Bitte um Ratschläge zur teilweisen Schließung von Positionen, Kontotyp RETAIL_HEDGING. Wenn ich beispielsweise die Hälfte einer Position im Expert Advisor schließe, sollte automatisch eine neue Order mit einem kleineren Lot eröffnet werden. Zu welchem Zeitpunkt ist der neue Auftrag also garantiert im Terminal? Verstehe ich das richtig, dass es nicht unmittelbar nach dem PositionClosePartial erscheinen muss und wir es irgendwo in OnTrade abfangen müssen?
Lassen Sie mich versuchen, meine eigene Frage zu beantworten. Beim Aufruf von PositionClosePartial kehrt das Ticket einer geschlossenen Order zu CTrade::ResultOrder() zurück, und das Positionsticket bleibt gleich, aber die Position selbst hat ein kleineres Lot. Versuchen wir zu schlussfolgern, dass der Aufruf von PositionClosePartial zu einer synchronen Verringerung der Position und Änderung der Auftragshistorie in einer Transaktion führt.
 

Was zum Teufel ist das?

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:

\auf die Hilfe - ja, sie wurde stark aufgewärmt, denn als ich mich (vor etwa zwei Jahren) mit Postfix- und Präfix-Operationen in mql beschäftigte, erinnere ich mich offensichtlich nicht mehr an dieses Material

Im Allgemeinen wurde das Thema geschlossen, und wir haben diesen Unterschied eingeführt und gut gemacht, aber man muss sie vor den Änderungen warnen, nicht wahr?

Interessehalber habe ich beschlossen, den alten 1159-Build vom Juni 2015 zu überprüfen. Die Hilfe enthält alles, was Slava zitiert hat. Vielleicht haben Sie also etwas verwechselt.

 
Aleksey Vyazmikin:

Was zum Teufel ist das?

Es ist ein Absturz:) Gehen Sie zu servicedesk!

 
Alexey Kozitsyn:

Es ist ein Absturz:) Gehen Sie zu servicedesk!

Ich hab's - die Bank ist pleite :)

 
Aleksey Vyazmikin:

Verstehe - die Bank ist pleite :)

Das kommt vor)

 
Alexey Kozitsyn:

Das kommt vor)

Ich weiß nicht, wie ich diesen Fehler lokalisieren kann? Ich möchte nur nicht das ganze Skript verraten, und ich möchte nicht alles neu verpacken....