AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...
Thema durchsuchen
Ansicht
Themen-Optionen

Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...

Ein Thema von Der schöne Günther · begonnen am 11. Mär 2015 · letzter Beitrag vom 12. Mär 2015
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Compiler warnt nicht vor nicht initialisiertem Rückgabewert wenn...

  Alt 11. Mär 2015, 19:02
Delphi-Version: XE7
... 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.

Geändert von Der schöne Günther (11. Mär 2015 um 19:27 Uhr)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

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

  Alt 11. Mär 2015, 19:44
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".
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 11. Mär 2015, 19:59
Einen QC-Eintrag gibt es dafür.
http://qc.embarcadero.com/wc/qcmain.aspx?d=85951

Welche Warnungen unterbleiben denn noch?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 11. Mär 2015, 20:09
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...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

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

  Alt 11. Mär 2015, 20:11
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 ...() : Boolean;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

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

  Alt 11. Mär 2015, 20:35
Wie findet ihr alle immer die QC/RSP-Einträge? Ich bin zu dumm dafür.

In diesem Fall ist es wurscht um welchen generischen Typen es sich handelt, denn der wird ja gar nicht zurückgeliefert ...() : Boolean;
Richtig, das war mit Absicht um die Sache noch deutlicher zu machen. Ist im verlinkten QC-Beispiel ja auch so.

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.

Geändert von Der schöne Günther (11. Mär 2015 um 20:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 11. Mär 2015, 21:34
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

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

  Alt 11. Mär 2015, 22:35
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;
$2B or not $2B
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

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

  Alt 12. Mär 2015, 06:42
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.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#10

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

  Alt 12. Mär 2015, 07:10
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.
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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