Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi STRING könnte undefiniert sein. (https://www.delphipraxis.net/190959-string-koennte-undefiniert-sein.html)

stahli 23. Nov 2016 21:36

STRING könnte undefiniert sein.
 
Delphi-Quellcode:
function TMyObject.MyInteger: Integer;
begin

end;

function TMyObject.MyString: string;
begin

end;

Mein Compiler warnt für die Integer-Funktion, dass der Resultwert undefiniert sein könnte, aber nicht für die String-Funktion.

Ist das ein Bug?
Bei Euch reproduzierbar?

Der schöne Günther 23. Nov 2016 21:51

AW: STRING könnte undefiniert sein.
 
Interfaces z.B. auch. Ist nun mal so. Liest doch eh keiner die Compiler-Warnungen ;-)

http://www.delphipraxis.net/175233-w...ml#post1217791

bytecook 23. Nov 2016 21:53

AW: STRING könnte undefiniert sein.
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1354539)
Interfaces z.B. auch. Ist nun mal so. Liest doch eh keiner die Compiler-Warnungen ;-)

http://www.delphipraxis.net/175233-w...ml#post1217791

Hehe. Manchereiner macht auf lernfähig und verwendet jetzt zudem Fixinsight...

Delphi-Laie 23. Nov 2016 23:10

AW: STRING könnte undefiniert sein.
 
Zitat:

Zitat von stahli (Beitrag 1354538)
Ist das ein Bug?

Zumindest wirkt es inkonsistent, bei strenger Auslegung demnach ja.

nahpets 24. Nov 2016 00:19

AW: STRING könnte undefiniert sein.
 
Meine bisherige praktische Erfahrung:

Ein String, dem man nix zuweist ist ein Leerstring, hat also einen definierten Inhalt.

Bei 'ner Zahl kann es irgendeine Zahl sein, die in den entsprechenden Typ reinpasst (meistens 0, aber nicht immer).

Und die Compilerwarnungen zu den nicht sinnvoll belegten Variabeln ... lese ich und behebe diese Fehler, sofern sie aus meinen eigenen Routinen kommen.

Bei fremden Source lasse ich die Finger davon, es sei denn, es ist mit einer Fehlfunktion zu rechnen.

Und Delphi 7 meckert auch nur bei der Integerfunktion, die Stringfunktion ist wohl "egal".

himitsu 24. Nov 2016 01:47

AW: STRING könnte undefiniert sein.
 
Alle gemanageten Typen sind immer initialisiert, da die automatische Speicherverwaltung sonst nicht funktionieren kann.

ABER, hier ist es nicht so initialisiert, wie es dir gefallen würde.

Delphi implementiert dein
Delphi-Quellcode:
function TMyObject.MyString: string;
intern so
Delphi-Quellcode:
procedure TMyObject.MyString(var Result: string); // als letztes Parameter

und das eribt was Schönes, wenn diese Variable schon vorher durch was Anderes gefüllt/wiederverwendet wurde. :twisted:

Zitat:

Ein String, dem man nix zuweist ist ein Leerstring, hat also einen definierten Inhalt.
Definiert ja, aber nicht immer ein Leerstring. (lokale Variablen ja, aber nicht "zwangsweise" immer beim Result)

nahpets 24. Nov 2016 09:30

AW: STRING könnte undefiniert sein.
 
Zitat:

Zitat von himitsu (Beitrag 1354551)
Zitat:

Ein String, dem man nix zuweist ist ein Leerstring, hat also einen definierten Inhalt.
Definiert ja, aber nicht immer ein Leerstring. (lokale Variablen ja, aber nicht "zwangsweise" immer beim Result)

Deshalb schrieb ich ja auch:
Zitat:

Meine bisherige praktische Erfahrung.
Will heißen, mir ist bewusst nix anderes untergekommen, das heißt aber nicht, dass es beim nächsten Mal nicht doch anders sein könnte.

Meine Regel ist: Wenn der Compiler meckert, dass was undefiniert sein könnte, dann hat er recht und ich habe das zu korrigieren. Ohne Wenn und Aber.

Und wenn er nicht meckert, habe ich gefälligst selbst aufzupassen ;-)

himitsu 24. Nov 2016 09:34

AW: STRING könnte undefiniert sein.
 
Jupp, das was angemeckert wird, ist meistens falsch.
Zusätzlich wird "Vieles" nicht angemeckert, obwohl es potentiell falsch sein kann/ist.
Und selten wird was angemeckert, obwohl es richtig ist.

Lokale Variablen sind nicht initialisiert, abgesehn gemanagte Typen.
Globales und Klassenfelder sind immer initialisiert.
Thread-Lokales ist initialisiert, wird aber nicht finalisiert.
Und was in Pointern liegt, da ist der Entwickler dran Schuld.


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