Zu unerwarteten Fehlern beim CASE würde es nur führen, wenn man doppelte Werte durch die Änderungen bekommt UND der Compiler die Reihenfolge der Auswertung geändert (optimiert) hat.
Normal macht Case
intern kein
Delphi-Quellcode:
if i = 0 then ...
else if i = 1 then ...
else if i = 3 then ...
else if i = 4 then ...
else if i = -5 then ...
else ...
sondern eher sowas
Delphi-Quellcode:
//Inc(i, 132) or Dec(i, 123) wenn erster Wert keine 0 ist
if i = 0
then ...
// am Ende jeweils ein "goto CaseEnd;"
Dec(i);
if i = 0
then ...
Dec(i, 2);
if i = 0
then ...
Dec(i);
if i = 0
then ...
Inc(i, 9);
if i = 0
then ...
{else} ...
CaseEnd:
Ja, und sowas klappt nur, wenn die Konstanten "unveränderbar" sind, damit der Compiler quasi mit ihnen "rechnen" kann.