WHILE ... DO / BREAK Error

mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

WHILE ... DO / BREAK Error

 · 
Posted: 11.07.2018 - 13:40  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: WHILE ... DO / BREAK Error

 · 
Posted: 11.07.2018 - 14:07  ·  #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
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: WHILE ... DO / BREAK Error

 · 
Posted: 11.07.2018 - 14:13  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: WHILE ... DO / BREAK Error

 · 
Posted: 11.07.2018 - 14:32  ·  #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
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: WHILE ... DO / BREAK Error

 · 
Posted: 11.07.2018 - 15:39  ·  #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:
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   93   107 · Page-Gen-Time: 0.022006s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI