Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Compiler-Warnung: ...ist möglicherweise nicht initialisiert (https://www.delphipraxis.net/68687-compiler-warnung-ist-moeglicherweise-nicht-initialisiert.html)

Martin K 3. Mai 2006 20:22


Compiler-Warnung: ...ist möglicherweise nicht initialisiert
 
Ich verstehe es nicht, es kommt zu folgender Warnmeldung:
Zitat:

[Warnung] Unit1.pas(39): Variable 'Obj' ist möglicherweise nicht initialisiert worden
Dieser Code (vereinfacht):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; Obj: TObject;
begin
  for i:=0 to Memo1.Lines.Count-1 do
  begin
    if Memo1.Lines[i]='Parent' then
      Obj:=Self      // hier initialisiert
    else
    if Memo1.Lines[i]<>'' then
      Obj:=FindComponent(Memo1.Lines[i]) // hier auch initialisiert
    else
      Continue;     // nicht initialisiert, aber Schleife wird ja auch fortgesetzt
    if IsPublishedProp(Obj,'Font') then // <--- hier Warnmeldung ---
      {...}
  end;
end;
Kann mir das einer erklären :?: :?: :?:

fwsp 3. Mai 2006 20:24

Re: Compiler-Warnung: ...ist möglicherweise nicht initialisi
 
es ist in ner if-anweisung und damit logischer weise eventuell nicht initialisiert, da die if ja nicht true sein muss
wenn du weißt das es true wird, kannst du es einfach ignorieren.

Martin K 3. Mai 2006 20:30

Re: Compiler-Warnung: ...ist möglicherweise nicht initialisi
 
Aber ich komme doch gar nicht in die IF-Anweisung, wenn Obj nicht initialisiert ist:
Delphi-Quellcode:
{..}
    else
      Continue; // nicht initialisiert, aber ich komme dann auch nicht in die IF-Anweisung
    if IsPublishedProp(Obj,'Font') then
   {..}
Oder?


Zitat:

Zitat von fwsp
es ist in ner if-anweisung und damit logischer weise eventuell nicht initialisiert, da die if ja nicht true sein muss
wenn du weißt das es true wird, kannst du es einfach ignorieren.

Hä?
Verstehe ich nicht.
Was hat das denn damit zu tun, ob die IF-Anweisung true oder false ergibt?
Überprüfen tut er die doch immer...

..außer, bei Continue !?!?

SirThornberry 3. Mai 2006 20:31

Re: Compiler-Warnung: ...ist möglicherweise nicht initialisi
 
Continue ist halt so eine Ausnahme die vom Compiler nicht berücksichtigt wird (ist ja nur ein besseres goto)

himitsu 3. Mai 2006 20:34

Re: Compiler-Warnung: ...ist möglicherweise nicht initialisi
 
Delphi-Quellcode:
else
      Continue;
... versuchst mal so ... es muß einfach nur sichergestellt werden, das obj vorher was zugewiesen wurde, dann mekert delphi nicht:
Delphi-Quellcode:
else
begin
      Continue;
      obj := nil;
end;

Martin K 3. Mai 2006 20:36

Re: Compiler-Warnung: ...ist möglicherweise nicht initialisi
 
Okay, der Compiler berücksichtigt das Continue nicht.
Das war's.

Aber zu einem Fehler kann es beim Ausführen dieses Codes nicht kommen ?!?

@himitsu:

Du meinst wohl:
Delphi-Quellcode:
{...}
   Obj := nil; // nicht self
{...}

Hawkeye219 3. Mai 2006 20:39

Re: Compiler-Warnung: ...ist möglicherweise nicht initialisi
 
Mich würde ein Continue, das von ausführbaren Anweisungen gefolgt wird, eher verwirren.
Eine Initialisierung vor der Schleife finde ich persönlich sauberer.

Gruß Hawkeye

Martin K 3. Mai 2006 20:40

Re: Compiler-Warnung: ...ist möglicherweise nicht initialisi
 
Ja, das denk ich auch.
Also so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; Obj: TObject;
begin
  Obj := nil; //<-- hier hinzugefügt
  for i:=0 to Memo1.Lines.Count-1 do
  begin
    if Memo1.Lines[i]='Parent' then
      Obj:=Self
    else
    if Memo1.Lines[i]<>'' then
      Obj:=FindComponent(Memo1.Lines[i])
    else
      Continue;
    if IsPublishedProp(Obj,'Font') then
      {...} 
  end;
end;

Mackhack 3. Mai 2006 20:52

Re: Compiler-Warnung: ...ist möglicherweise nicht initialisi
 
Zitat:

Zitat von Hawkeye219
Eine Initialisierung vor der Schleife finde ich persönlich sauberer.

Gruß Hawkeye

Da hab ich grad mal ne Frage an euch...:

Ist es sauberer, besser,... direkt am Anfang einer Function/Procedure Variablen zu initialisieren oder bevor sie wirklich zum Einsatz kommen?

Delphi-Quellcode:
Var
  I : Integer;
Begin
  I := 0;
  For I := 0 To...
  ...
End;
oder so?

Delphi-Quellcode:
Var
  ...
  ...
  ...
  I := 0;
  For I := 0 To...
  ...

SirThornberry 3. Mai 2006 20:54

Re: Compiler-Warnung: ...ist möglicherweise nicht initialisi
 
dein Beispiel ist etwas daneben. Denn vor einer "For-Schleife" ist es völlig überflüssig die Zählvariable zu initialisieren weil der Wert niemals verwendet wird (der Compiler wird dir auch eine Meldung ausgeben)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr.
Seite 1 von 3  1 23      

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