Ich bekomme bei folgendem
case
-Statement eine Warnung, dass eine Variable "möglicherweise" nicht initialisiert sein könnte:
Delphi-Quellcode:
type
TEnum = (a, b, c);
var
myEnum: TEnum;
value: Byte;
begin
myEnum := TEnum.a;
case myEnum of
TEnum.a: value := 10;
TEnum.b: value := 20;
TEnum.c: value := 30;
end;
WriteLn(value); // W1036"might not have been initialized"
// altough the case statement is exhaustive
end.
Bei C++ ist der Compiler schlau genug:
Code:
enum Enum {a, b, c};
int main(int argc, char **argv) {
Enum e = Enum::b;
char c;
switch (e)
{
case Enum::a:
c = 1;
break;
case Enum::b:
c = 2;
break;
case Enum::c:
c = 3;
break;
}
std::cout << c;
return NO_ERROR;
}
Bei Sprachen wie Swift oder Rust bricht der Compiler mit einem Fehler ab, wenn ein match-Statement
nicht vollständig ist.
Delphi bekommt von all dem aber nichts mit, und redet sich damit raus, dass es "möglicherweise" undefiniert sein könnte.
Zumindest in 10.0 Seattle.
Ist das in einer aktuellen Delphi-Version immer noch so?