![]() |
Warnung bei nicht initialisieren String-Result
Hallo zusammen!
Die folgende function erzeugt erwartungsgemäß eine Warnung:
Delphi-Quellcode:
W1035 Rückgabewert der Funktion 'GetInteger' könnte undefiniert sein
function GetInteger(Value: boolean): integer;
begin if Value then Result := 1; end; Mache ich das gleiche mit einem String als Result, wird keine Warnung generiert:
Delphi-Quellcode:
Kann man es irgendwie konfigurieren so dass diese Warnung ausgelöst werden kann??
function GetString(Value: boolean): string;
begin if Value then Result := 'Value'; end; Man könnte nun argumentieren, dass ein String im Gegensatz zum Integer immer vorinitialisiert wird und die Warnung daher nicht nötig ist. Aber da Delphi intern scheinbar mit var-Parametern statt Result-Werten arbeitet, kann dies zu unerwartetem Verhalten führen, wenn man der Funktion eine Variable zuweist. Beispiel:
Delphi-Quellcode:
Das Memo enthält nach dieser Funktion tatsächlich 2 Zeilen „Value“ da die Funktion die Variable Test
procedure TForm1.Button1Click(Sender: TObject);
var Test : string; begin Memo1.Lines.Clear; Test := GetString(true); Memo1.Lines.Add(Test); Test := GetString(false); Memo1.Lines.Add(Test); end; als Var-Parameter nutzt, also etwa als wenn man es so schreiben würde:
Delphi-Quellcode:
procedure GetString(Value: boolean; var Result: string);
Daher würde ich gerne davor gewarnt werden, wenn ein Result String undefiniert sein könnte ?! |
AW: Warnung bei nicht initialisieren String-Result
Was glaubst du, wovor ich gerne alles gewarnt werden würde. Aber im Delphi-Land lebt man anscheinend gerne gefährlich 8-)
Du hast mit der Beobachtung vollkommen Recht, siehe Doku: ![]() Zitat:
Die Doku ist natürlich auch nicht vollständig, bei IInterface ist das auch so. Bei TObject anscheinend aber nicht. Verstanden habe ich es nie. |
AW: Warnung bei nicht initialisieren String-Result
Zitat:
Dazu gehören nun mal Strings und Interfaces :) |
AW: Warnung bei nicht initialisieren String-Result
Jojo, der fängt bald an zu schimmeln, so alt ist der Wunsch schon:
![]() Ich hab ihn mal bei Marco in Erinnerung gerufen - ein paar +10 Votes für den Eintrag würden übrigens nicht schaden :) P.S. Der QC Windows Client bockt übrigens aktuell wegen des enorm lahmen Logins, aber über die Weboberfläche kommt man drauf. |
AW: Warnung bei nicht initialisieren String-Result
Danke für Eure Infos! Habe meine Votes abgegeben...
|
AW: Warnung bei nicht initialisieren String-Result
Zitat:
|
AW: Warnung bei nicht initialisieren String-Result
Zitat:
|
AW: Warnung bei nicht initialisieren String-Result
Im Grunde müsste doch "nur" etwas da rein, was kurz nach dem Beginn einer Funktion das Result als "nicht initialisiert" setzt, bzw. diesen Result-Var-Parameter nicht automatisch auf "initialisiert", womit dann all diese Warnungen wieder möglich werden würden. :gruebel:
Und wenn man schon dabei ist, dann bitte auch das Gleiche ebenfalls bei Schleifen-Variablen nach der For-Schleife. |
AW: Warnung bei nicht initialisieren String-Result
Es ist ja kein Mangel, sondern vom Compilerbauer mit Absicht so eingebaut. Das 'Feature' einfach wieder ausbauen.
Wenn das dann gleich ein Sprachfehler wird (also keine Warnung, sondern ein Compilererror), kann man sich diese dämliche Compilermagic auch sparen. Dann muss der Programmierer eben immer explizit initialisieren, was imho sowieso besser ist. |
AW: Warnung bei nicht initialisieren String-Result
Warum?
Das Result und die Forschleifenvariable sind danach nunmal in einem Zustand, wo sie keinen definierten Wert besitzen. Ja, das Result ist initialisiert, aber eben nicht mit einem
Delphi-Quellcode:
, nil oder Empty, so wie man es erwarten würde.
''
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz