Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Variable Möglicherweise nicht Deklariert... (https://www.delphipraxis.net/214061-variable-moeglicherweise-nicht-deklariert.html)

Metschu 11. Nov 2023 14:21

Delphi-Version: 10.3 Rio

Variable Möglicherweise nicht Deklariert...
 
Hallo zusammen,

wie bekomme ich bei folgendem Quelltext die Warnungen unten ausgeblendet:

Delphi-Quellcode:
Case KomUnit.ModulTyp of
    1: Begin;
         usb  := tUSB_Kom.Create;
         error := usb.connect;
       End;
    2: Begin;
         Fox  := tFox_kom.Create;
         Error := Fox.connect;
       end;
end;

// ... Mache was mit dem gewählten Modul
// gebe nun das gewählte Modul wieder frei:

    case KomUnit.ModulTyp of
      1: begin;
          usb.disconnect; // < W1036 Variable 'USB' ist möglicherweise nicht initialisiert worden
          usb.Free;
         end;
      2: begin;
          Fox.disconnect; // < W1036 Variable 'fox' ist möglicherweise nicht initialisiert worden
          fox.Free;
         end;
    end;
Der Grund für die Warnung erscheint mir Logisch, da für Delphi ja nicht Sichergestellt ist, das die Variable Wirklich Initialisiert ist, von der Logik her jedoch schon, da der Modultyp währenddessen nicht verändert wird.

Bekomme ich die Warnung irgendwie weg?

Danke und Gruß

Torsten.

Uwe Raabe 11. Nov 2023 14:50

AW: Variable Möglicherweise nicht Deklariert...
 
Ein
Delphi-Quellcode:
usb := nil
vor das erste
Delphi-Quellcode:
case
.

Metschu 11. Nov 2023 15:49

AW: Variable Möglicherweise nicht Deklariert...
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1529493)
Ein
Delphi-Quellcode:
usb := nil
vor das erste
Delphi-Quellcode:
case
.

Super, das hat geklappt. :thumb:

Vielen Dank.

freimatz 13. Nov 2023 09:04

AW: Variable Möglicherweise nicht Deklariert...
 
Bei mir gibts da immer(!) ein else mit einem raise einer Exception. Das sollte auch helfen (ungetestet)

himitsu 13. Nov 2023 09:39

AW: Variable Möglicherweise nicht Deklariert...
 
ja, ein Else stellt den abweichenden Pfad bereit
und das Raise unterbricht diesen Pfad, womit Nachfolgendes nicht mehr geprüft wird. (aber nur direkt Raise, nicht in einer Funktion verpackt)

dummzeuch 13. Nov 2023 09:59

AW: Variable Möglicherweise nicht Deklariert...
 
Zitat:

Zitat von Metschu (Beitrag 1529491)
Der Grund für die Warnung erscheint mir Logisch, da für Delphi ja nicht Sichergestellt ist, das die Variable Wirklich Initialisiert ist, von der Logik her jedoch schon, da der Modultyp währenddessen nicht verändert wird.

Bekomme ich die Warnung irgendwie weg?

Vielleicht am Einfachsten diesen Teil ...

// ... Mache was mit dem gewählten Modul

in eine Procecedure auslagern und dann die beiden Case-Statements zusammenfassen, so dass man dort jeweils nur das im Case-Zweig erzeugte Objekt freigibt.

Delphi-Quellcode:
case ... of
  bla: begin
    Var1 := Typ1.Create;
    try
      MachWasMit(Var1);
    finally
      Var1.Disconnect;
      Var2.Free;
    end;
  end;
  blub: begin
    Var2 := Typ2.Create;
    try
      MachWasMit(Var2);
    finally
      Var2.Disconnect;
      Var2.Free;
    end;
  end;
end;
Das setzt natürlich voraus, dass Typ1 und Typ2 einen gemeinsamen Vorfahren haben.
Wobei, wenn das der Fall ist, kann auch nur eine Variable von diesem gemeinsamen Typ verwenden und sich das zweite Case-Statement komplett schenken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz