WHILE ... DO / BREAK Error

mc-electronic
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Sauerland NRW
Beiträge: 372
Dabei seit: 03 / 2008
Betreff:

WHILE ... DO / BREAK Error

 · 
Gepostet: 11.07.2018 - 13:40 Uhr  ·  #1
Hallo,

ich habe folgendes Phänomen: Ich nutze in einer WHILE / DO Schleife ein WITH xRec DO Statement, um auf einen Record zuzugreifen. Wenn ich nun die WHILE-Schleife innerhalb des WITH Statements mit einem BREAK; abbreche, bekomme ich falsche Werte für lokale Variablen zurück, die ich im WITH-Statement ändere.
Wenn ich den Record ohne WITH vollständig addressiere, stimmt alles.

Darf man ein WHILE nicht mit BREAK verlassen, wenn man ein WITH darin verwendet?

Michael
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 26
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: WHILE ... DO / BREAK Error

 · 
Gepostet: 11.07.2018 - 14:07 Uhr  ·  #2
Hallo Michael
ja beim with gibt es einige Einschränkungen
Welche genau müsste ich selbst im Manual nachlesen
rolf
mc-electronic
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Sauerland NRW
Beiträge: 372
Dabei seit: 03 / 2008
Betreff:

Re: WHILE ... DO / BREAK Error

 · 
Gepostet: 11.07.2018 - 14:13 Uhr  ·  #3
Hallo Rolf,

im Manual hatte ich nix dazu gefunden. Inzwischen habe ich mit Tüfteln herausgefunden, daß der Compiler einfache Konstrukte auch anmeckert. Wenn man jedoch (wie ich) das Break in mehr als einem IF etwas verschachtelt, ist der Compiler zufrieden und der Laufzeitfehler ist da.
Wäre gut, wenn ein BREAK innerhalb eines WITH generell nicht zugelassen würde.

Michael

Anbei ein simples Beispiel:
[code]
lBy := 0;
While lBy = 0 Do
   With gCZDiffRec Do
      lBy := 1;
      If lBy = 1 Then
         If lBy = 1 Then
            Break;
         EndIf;
      EndIf;
   EndWith;
EndWhile;
WritelnTerm('lBy: ' + ByteToStr(lBy), [RS232]);
[/code]
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 26
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: WHILE ... DO / BREAK Error

 · 
Gepostet: 11.07.2018 - 14:32 Uhr  ·  #4
Hallo Michael
es ist sehr schwierig da alle fälle abzudecken. Das with bringt bei einer RISC CPU nichts. Wurde nur der Vollständigkeit halber implementiert. Der generierte maschinen Code ist nicht kleiner als ein direkt zugriff.
Ich selbst benutze das With garnicht
rolf
miparo
Schreiberling
Avatar
Geschlecht:
Herkunft: Germany
Alter: 59
Beiträge: 989
Dabei seit: 09 / 2007
Betreff:

Re: WHILE ... DO / BREAK Error

 · 
Gepostet: 11.07.2018 - 15:39 Uhr  ·  #5
Der Code wird sogar wesentlich größer, da habe ich das with bei mir
überall entfernt..
Lesefehler von mir. While und nicht with angry9:
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   94   108 · Page-Gen-Time: 0.028227s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI