Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn... (https://www.delphipraxis.net/184244-compiler-warnt-nicht-vor-nicht-initialisiertem-rueckgabewert-wenn.html)

Der schöne Günther 11. Mär 2015 18:02

Delphi-Version: XE7

Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
 
... es eine generische Methode ist.

Ich will nicht wissen wie viele solcher Stellen ich bereits überall im Code habe. Auf XE7, Win32 und Win64 gibt es keine Warnungen mit folgendem Code:

Delphi-Quellcode:
program Project22;

type
   {$DEFINE GENERIC}
   TSomeClass = class
      public function someFunc{$IFDEF GENERIC}<T>{$ENDIF}(): Boolean;
   end;


function TSomeClass.someFunc{$IFDEF GENERIC}<T>{$ENDIF}(): Boolean;
begin
   // Nope
end;

begin
   WriteLn( TSomeClass.Create().someFunc{$IFDEF GENERIC}<TObject>{$ENDIF}() );
end.

Ich sehe ein dass manche Typen die T annehmen kann (String, Interface, ...) nicht uninitialisiert sein können. Aber selbst wenn ich den Typ auf ": class" einschränke kommt keine Warnung.

Habe ich einen Denkfehler oder ist das eine weitere Delphi-Eigenheit™ ?


// Edit:
Ich merke grade, eigentlich warnt er in einer generischen Methode vor so ziemlich gar nichts. Also schon fast Blindflug. Delphi ist halt nur was für Profis.

nuclearping 11. Mär 2015 18:44

AW: Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
 
Vielleicht weiss Delphi selbst nichts damit anzufangen, so wie C++ und macht auch einen Blindflug. Frei nach dem Motto "Der wird schon wissen, was er macht". :stupid:

Daniel 11. Mär 2015 18:59

AW: Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
 
Einen QC-Eintrag gibt es dafür.
http://qc.embarcadero.com/wc/qcmain.aspx?d=85951

Welche Warnungen unterbleiben denn noch?

jaenicke 11. Mär 2015 19:09

AW: Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
 
Viel schöner ist, dass unter bestimmten Umständen ein Fehler innerhalb einer generischen Klasse erst bei der Verwendung durch den Compiler gemeldet wird. Zum Beispiel ein Fehler, dass Typen inkompatibel sind. Die vom Compiler markierte Stelle war aber vollkommen korrekt...

Sir Rufo 11. Mär 2015 19:11

AW: Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1293067)
Delphi-Quellcode:
function TSomeClass.someFunc{$IFDEF GENERIC}<T>{$ENDIF}(): Boolean;
begin
   // Nope
end;
Ich sehe ein dass manche Typen die T annehmen kann (String, Interface, ...) nicht uninitialisiert sein können. Aber selbst wenn ich den Typ auf ": class" einschränke kommt keine Warnung.

Habe ich einen Denkfehler oder ist das eine weitere Delphi-Eigenheit™ ?

In diesem Fall ist es wurscht um welchen generischen Typen es sich handelt, denn der wird ja gar nicht zurückgeliefert
Delphi-Quellcode:
...() : Boolean;

Der schöne Günther 11. Mär 2015 19:35

AW: Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
 
Wie findet ihr alle immer die QC/RSP-Einträge? Ich bin zu dumm dafür. :oops:

Zitat:

Zitat von Sir Rufo (Beitrag 1293079)
In diesem Fall ist es wurscht um welchen generischen Typen es sich handelt, denn der wird ja gar nicht zurückgeliefert
Delphi-Quellcode:
...() : Boolean;

Richtig, das war mit Absicht um die Sache noch deutlicher zu machen. Ist im verlinkten QC-Beispiel ja auch so.

Zitat:

Zitat von Daniel (Beitrag 1293077)
Welche Warnungen unterbleiben denn noch?

Spontan hatte ich mit einem
Delphi-Quellcode:
var
   x: Integer;
begin
   x:= x;
noch auf H2077 und W1036 geprüft. Wurden beide auch nicht angezeigt.

himitsu 11. Mär 2015 20:34

AW: Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
 
Variablen und Results mit gemanageten Typen (Interface, Variant, dyn Array und String) werden sowieso nie so gewarnt, denn diese sind immer initialisiert.
Wäre aber zu praktisch, wenn der Compiler die automatische Initialisierung manchmal nicht mitzählen würde, denn speziell beim Result haben diese Typen ein klitzekleines Problem, wenn man die Funktion in 'ner Schleife aufruft.

Und im NextGen zählen nur auch Objekte dazu.


Aber bei Boolean kann man das schon als Fehler ansehn.

himitsu 11. Mär 2015 21:35

AW: Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
 
Zum Glück gab es grade diesen Thread ... so war ich noch bissl aufmerksamer.

Hatte dadurch noch einen weiteren Fall entdeckt.

Delphi-Quellcode:
procedure Test;
var
  Value: Integer;
procedure Inner;
  begin
    if Value = 0 then
      ;
  end;
begin
  //Value := 0; // das hatte ich vergessen
  Inner;
end;

Dejan Vu 12. Mär 2015 05:42

AW: Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
 
Zitat:

Zitat von himitsu (Beitrag 1293083)
Variablen und Results mit gemanageten Typen (Interface, Variant, dyn Array und String) werden sowieso nie so gewarnt, denn diese sind immer initialisiert.

Es ist doch aber trotzdem ein Programmiererfehler, wenn der Rückgabewert nicht explizit gesetzt wird. Gut, Delphi ist da großzügig, denn es wird ja nur moniert, das da nichts initialisiert ist.

Ich kenne kein Argument, welches dafür spricht, einen nicht explizit angegebenen Rückgabewert zuzulassen. Außer vielleicht den, das man weniger zahlen muss, wenn man nach Programmzeilen abrechnet.

uligerhardt 12. Mär 2015 06:10

AW: Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
 
Zitat:

Zitat von himitsu (Beitrag 1293087)
Hatte dadurch noch einen weiteren Fall entdeckt.

Delphi-Quellcode:
procedure Test;
var
  Value: Integer;
procedure Inner;
  begin
    if Value = 0 then
      ;
  end;
begin
  //Value := 0; // das hatte ich vergessen
  Inner;
end;

Sobald lokale Routinen im Spiel sind, fallen eh einige Warnungen unter den Tisch. Das ist schon "ewig" so.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 Uhr.
Seite 1 von 2  1 2      

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