Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Delphi merkt nicht wenn ein case-Statement vollständig ist, oder?

  Alt 2. Dez 2021, 21:05
Delphi-Version: 10 Seattle
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?
  Mit Zitat antworten Zitat