AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi nicht initialisierte Variable erzeugt keine Warnung/Hinweis
Thema durchsuchen
Ansicht
Themen-Optionen

nicht initialisierte Variable erzeugt keine Warnung/Hinweis

Ein Thema von AJ_Oldendorf · begonnen am 13. Nov 2019 · letzter Beitrag vom 10. Jun 2020
Antwort Antwort
Seite 1 von 3  1 23      
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#1

nicht initialisierte Variable erzeugt keine Warnung/Hinweis

  Alt 13. Nov 2019, 11:21
Hallo zusammen,
warum erzeugt der Code im Screenshot mit den entsprechenden Einstellungen keine Warnung/Hinweis, dass SL nicht initialisiert ist?
Miniaturansicht angehängter Grafiken
2019.11.13-11_18_34-001.png   2019.11.13-11_18_56-001.jpg  
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: nicht initialisierte Variable erzeugt keine Warnung/Hinweis

  Alt 13. Nov 2019, 11:33
Geht auf jeden Fall noch für Delphi Tokyo:
Miniaturansicht angehängter Grafiken
sl.png  
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#3

AW: nicht initialisierte Variable erzeugt keine Warnung/Hinweis

  Alt 13. Nov 2019, 11:46
Also ich gehe davon aus, das er es hier als Intitialisierung auch im Try-Block ansieht.
Wenn du SL.Text jedoch "anwenden" würdest (z.B. ABC.Text := SL.Text; ohne vorher SL.Text := ''; ), denke ich das du die Fehlermeldung erhalten müsstest.

Das du die Stringlist gar nicht created hast scheint, ihn nicht zu interessieren.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (13. Nov 2019 um 11:50 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: nicht initialisierte Variable erzeugt keine Warnung/Hinweis

  Alt 13. Nov 2019, 11:47
Das sind die Stellen wo ich echt jegliche Hoffnung verliere. Kleinstes nachzustellendes Beispiel:

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var
   sl: TStringList;
begin
   sl.Text := '';
   FreeAndNil(SL);
end;
wirft in 10 Seattle auch keine Warnung.

Wahrscheinlich irgendein Zusammenhang mit untypisierten Parametern:

Delphi-Quellcode:
procedure acceptUntyped(const obj);
begin
   // do nothing
end;

procedure TForm2.FormCreate(Sender: TObject);
var
   obj: TObject;
begin
   obj.ClassName(); // << no warning
   acceptUntyped(obj);
end;
Das ist dem Compiler auch keine Warnung wert.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: nicht initialisierte Variable erzeugt keine Warnung/Hinweis

  Alt 13. Nov 2019, 11:55
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var
   sl: TStringList;
begin
   sl.Text := '';
   sl.Free;
end;
Das wirft eine Warnung. Ich schätze der Compiler denkt, dass sl ggf. in FreeAndNil initialisiert wird (wegen dem var Parameter).
Ist natürlich trotzdem falsch (in dem Fall) weil ja schon vor der potenziellen Initialisierung in FreeAndNil auf sl zugegriffen wird.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#6

AW: nicht initialisierte Variable erzeugt keine Warnung/Hinweis

  Alt 13. Nov 2019, 12:31
TObject.ClassName ist eine class function ... da macht es ja sogar noch Sinn,
dass er nicht extra meckert, wenn darauf ohne Objekt zugegriffen wird,
da bei einer class function ja eh nicht auf das Objekt zugegriffen werden kann.

Warum das andere keine Warnung wirft, erschließt sich mir auch gerade nicht.

MfG Incocnito
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: nicht initialisierte Variable erzeugt keine Warnung/Hinweis

  Alt 13. Nov 2019, 12:37
ClassName ist aber kein Makro, sondern schon eine richtige Funktion die zur Laufzeit nachschlagen muss welche Klasse das Objekt denn ist. Es ist also nicht ok, keine Warnung zu generieren.

Delphi-Quellcode:
procedure p();
var
   x, y, z: TObject;
begin
   x := TObject.Create();
   y := TInterfacedObject.Create();
   z := nil;

   WriteLn( x.ClassName() );
   WriteLn( y.ClassName() );
   WriteLn( z.ClassName() );
end;

Es gibt echt noch tausend andere Fälle dass der Compiler vor offensichtlichen Fehlern nicht warnt. Embarcadero stolpert ja selbst darüber, TJson.Format(..) beispielsweise hat bis vor ein, zwei Versionen ungültiges Json ausgespuckt weil der Rückgabewert nicht richtig initialisiert wurde und der Compiler davor nicht warnt.
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#8

AW: nicht initialisierte Variable erzeugt keine Warnung/Hinweis

  Alt 13. Nov 2019, 12:50
Delphi-Quellcode:
class function TObject.ClassName: string;
begin
  Result := UTF8ToString(_PShortStr(PPointer(PByte(Self) + vmtClassName)^)^);
end;
Hast offensichtlich recht! ... Das wiederspricht gerade meiner
Auffassung davon, wie class function gedacht sind ...
Ich hätte behauptet, sowas müsse als "normale" Funktion deklariert werden!

Also wieder zurück in den Grundkurs "wozu class function?"!

Edit: Gerade herausgefunden: "Self" ist bei einer class function die Klasse und nicht die Instanz.
... Weltordnung größtenteils wieder hergestellt!

MfG Incocnito

Geändert von Incocnito (13. Nov 2019 um 13:13 Uhr) Grund: Info zu "Self"
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#9

AW: nicht initialisierte Variable erzeugt keine Warnung/Hinweis

  Alt 13. Nov 2019, 12:50
Wenn es unter Tokyo noch ging, schließe ich darauf, dass es ein Fehlverhalten in 10.3 ist oder?
Würde ein QC daraus machen oder hat noch jemand eine Idee?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: nicht initialisierte Variable erzeugt keine Warnung/Hinweis

  Alt 13. Nov 2019, 13:41
Wenn es unter Tokyo noch ging, schließe ich darauf, dass es ein Fehlverhalten in 10.3 ist oder?
Würde ein QC daraus machen oder hat noch jemand eine Idee?
Vergleiche nochmal dein und meinen Screenshot!
Du nutzt FreeAndNil, was bei einer lokalen Variablen völlig überflüssig ist.
Probiere einfach mal SL.Free und schaue, ob die richtige Warnung kommt.

Wenn nein: Dann ist es eine Regression.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 03:56 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