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
Benutzerbild von Sir Rufo
Sir Rufo

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

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.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

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.326 Beiträge
 
Delphi 12 Athens
 
#3

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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

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

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
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.869 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 12. Mär 2015, 12:17
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;
Variablen oberhalb lokaler Prozeduren zu deklarieren halte ich persönlich für extrem unsauber. Wenn man diese darin braucht, sollte man diese auch übergeben...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 12. Mär 2015, 16:09
Nja, oberhalb kommen bei mir immer die Variablen, welche auch innen benutzt werden
und darunter die Variablen für die Hauptprozedur.

Aber wenn es dich beruhigt ... die Prozeduren sind seit gestern Abend eigenständige Methoden und die (vielen) Variablen ein Record als Var-Parameter.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

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 himitsu
himitsu

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

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

  Alt 12. Mär 2015, 08:29
Ich kenne kein Argument, ...
Darum auch ein "Problem", daß Delphi da nicht warnt.

Delphi-Quellcode:
function Test: string;
begin
  // Strings sind ja bekanntlich mit '' initialisiert, was im Prinzip auch stimmt. Ungünstig ist nur, daß Delphi hier
  // eigentlich procedure Test(var Result: string); implementiert, also in Bezug auf die fehlende "nicht initialisiert"-Warnung.
  Result := Result + '*';
end;

var
  S: string;
begin
  for i := 0 to 10 do
    S := Test;
  ShowMessage(S);
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:54 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 by Thomas Breitkreuz