Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Nicht initialisiert - wieso? (https://www.delphipraxis.net/38005-nicht-initialisiert-wieso.html)

easywk 13. Jan 2005 14:27


Nicht initialisiert - wieso?
 
Moin, moin,

in der Regel hat Delphi mit seinen Warnungen über "Variable ist möglicherweise nicht initialisiert worden" ja Recht und ich suche da auch immer hinterher. Ist mir schon mehrmals passiert, dass es dann unter ganz bestimmten Umständen wirklich so war und dann natürlcih Müll rausgekommen ist. In dem nachfolgenden Fall verstehe ich die Warnung aber nicht:
Delphi-Quellcode:
try
  GebDatum:=StrToDate(Trim(Sheet.Cells[row,11].Text));
except
  on EConvertError do continue;
  else GebDatum:=0;
end;
DecodeDate(GebDatum,y,m,d);
Gemeckert wird beim dem DecodeDate. Schreibe ich vor die try-Anweisung jetzt aber ein GebDatum:=0; dann meckert er, dass diese Zuweisung niemals verwendet wird.

Kann mir das jemand erklären?
cu easywk

BluesKid 13. Jan 2005 14:32

Re: Nicht initialisiert - wieso?
 
Moin

wenn du vor dem try der Variable nen Wert zuweist, und danach drekt wieder, dann hat die Zuweisung keinerlei Sinn.

Du machst ja nichts mit dem Wert, auser ihn 2 zeilen Später wieder zu überscheiben bzw. wenn das schief geht im except Teil.

Ergo wir die erste Zuweisung nie nicht für gar nie nix benötigt ;-)



schönen Gruß
Sam

[edit]öhm, Problem missverstanden, Thema verfehlt..sorry :angel2: [/edit]

Dax 13. Jan 2005 14:34

Re: Nicht initialisiert - wieso?
 
Das liegt am try. Sollte StrToDate fehlschlagen, gibt die Funktion keinen Wert zurück, sondern springt automatisch in den except-Block :arrow: Deine Variable ist nicht initialisiert worden. Und da auch nicht notwendigerweise eine zum Exceptiontyp passende Exception auftreten wird, kann es sein, das GebDatum auch im except-Block keinen Wert verpasst bekommt. Am besten vor den Try-Block GebtDatum := 0; hinschreiben, dann meckert der Compiler auch nicht mehr ;)

easywk 13. Jan 2005 14:34

Re: Nicht initialisiert - wieso?
 
Na, dass eine Zuweisung vor dem try sinnlos ist, ist mir schon klar.
Nur, warum soll sie jetzt in der Decode-Zeile nicht initialisert sein. Das verstehe ich nicht.

easywk 13. Jan 2005 14:36

Re: Nicht initialisiert - wieso?
 
@Dax: doch tut er: dann mault er, dass diese Zuweisung niemals benutzt wird. Außerdem kommt er auf das Decode nicht ohne initialisierung. bei On EConvertError springe ich aus der Schleife raus, in allen anderen Exceptions weise ich Null zu ....

Dax 13. Jan 2005 14:43

Re: Nicht initialisiert - wieso?
 
Wenn ich das so tue, meckert mein D6-Compiler aber nicht :?
Delphi-Quellcode:
GebDatum := 0;
try
  GebDatum:=StrToDate(Trim(Sheet.Cells[row,11].Text));
except
  on EConvertError do continue;
  else GebDatum:=0;
end;
DecodeDate(GebDatum,y,m,d);

easywk 13. Jan 2005 15:19

Re: Nicht initialisiert - wieso?
 
Delphi 7 Enterprise meckert aber:
"Der auf GebDatum zugewiesene Wert wird niemals benutzt"

Ich meine, wenn er das erkennt, dann müsste er auch merken, dass im anderen Fall die Variable intialisiert ist. Diese beiden Warnungen wiedersprechen sich einfach. Das ist es ja, was mich besonders stutzig macht :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:37 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