AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Manche Warnungen nicht für einzelne Zeilen steuerbar?
Thema durchsuchen
Ansicht
Themen-Optionen

Manche Warnungen nicht für einzelne Zeilen steuerbar?

Offene Frage von "p80286"
Ein Thema von Der schöne Günther · begonnen am 8. Okt 2014 · letzter Beitrag vom 9. Okt 2014
Antwort Antwort
Der schöne Günther

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

Manche Warnungen nicht für einzelne Zeilen steuerbar?

  Alt 8. Okt 2014, 20:05
Folgendes Beispiel:

Delphi-Quellcode:
procedure someProc();
var
   iterator: Integer;
   someValue: TObject;
begin
   for iterator := 0 to 5 do begin
      if iterator = 3 then
         someValue := TObject.Create()
      else
         Continue;

      {$WARN USE_BEFORE_DEF OFF}
      someValue.ClassName();

   end;
   // Die folgende Zeile sorgt dafür dass die Zeile oben TROTZDEM eine
   // Warnung erzeugt
   //{$WARN USE_BEFORE_DEF DEFAULT}
end;
// Die Warnung außerhalb der Methode wieder einzuschalten klappt
{$WARN USE_BEFORE_DEF DEFAULT
Ganz abgesehen davon dass die vom Compiler erzeugte Warnung übervorsichtig (=falsch) ist, warum kann ich sie nicht gezielt unterdrücken? Ich muss die Warnung außerhalb der Methode wieder auf DEFAULT setzen. Tue ich das innerhalb, bekomme ich trotzdem eine Warnung, als hätte ich sie nie ausgeschaltet.
  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
 
#2

AW: Manche Warnungen nicht für einzelne Zeilen steuerbar?

  Alt 9. Okt 2014, 00:05
Also bevor ich mit so einem esoterischen Schnickschnack anfangen würde, füge ich einfach eine Zeile Code am Anfang ein und der Keks ist geknuspert.

Auch wenn dieser Code nur beispielhaft ist, so muss im realen Code auch irgendwann die Instanz wieder freigegeben werden und gerade bevor ich mich da noch weiter verrenke, initialisiere ich die Variable gleich am Anfang und kann immer ganz beherzt und sorglos ein FreeAndNil( someValue ); ausführen.

Die Warnung wird also IMHO völlig zurecht ausgegeben.

Du solltest dich mehr damit beschäftigen die Warnung zu beherzigen und den Code sauber zu halten anstatt die Warnung auf Teufel komm raus zu unterdrücken. Meine Codes kommen Hinweis- und Warnungsfrei durch den Compiler ohne nackt mit dem Huhn durchs Feuer zu springen
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
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Manche Warnungen nicht für einzelne Zeilen steuerbar?

  Alt 9. Okt 2014, 07:53
Ganz abgesehen davon dass die vom Compiler erzeugte Warnung übervorsichtig (=falsch) ist, warum kann ich sie nicht gezielt unterdrücken?

someValue := nil; in die erste Zeile und der Drops is gelutscht...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Manche Warnungen nicht für einzelne Zeilen steuerbar?

  Alt 9. Okt 2014, 10:22
Instanzen freigeben und alles, darum geht es doch nicht.

Der Compiler warnt vor einem "Nicht initialisiert worden" das nie auftreten kann.

Klar, jetzt kann ich ein
someValue := Nil einfügen und dann natürlich noch ein
if Assigned(someValue) then asm nop end; für das sonst daraus resultierende "Auf someValue zugewiesener Wert wird nie benutzt" (wie passt das zusammen?).


Alternativ könnte ich die Warnung auch temporär abschalten. Das war meine Intention.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Manche Warnungen nicht für einzelne Zeilen steuerbar?

  Alt 9. Okt 2014, 11:06
if Assigned(someValue) then asm nop end;
Inline-Assembler kann man nur im Win32 benutzen
und dann ist der Compiler nicht intelligent genug soein IF wegzuoptimieren, wenn danach nichts mehr kommt und auch im IF keine Funktionen aufgerufen werden.
if Assigned(someValue) then ;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Manche Warnungen nicht für einzelne Zeilen steuerbar?

  Alt 9. Okt 2014, 11:10
Instanzen freigeben und alles, darum geht es doch nicht.

Der Compiler warnt vor einem "Nicht initialisiert worden" das nie auftreten kann.

Klar, jetzt kann ich ein
someValue := Nil einfügen und dann natürlich noch ein
if Assigned(someValue) then asm nop end; für das sonst daraus resultierende "Auf someValue zugewiesener Wert wird nie benutzt" (wie passt das zusammen?).
Dort kommt kein H2077.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

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

AW: Manche Warnungen nicht für einzelne Zeilen steuerbar?

  Alt 9. Okt 2014, 11:10
Alternativ könnte ich die Warnung auch temporär abschalten. Das war meine Intention.
Vielleicht hilft's, den Schleifeninhalt in eine lokale Prozedur zu extrahieren (mit Exit statt Continue)?
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Manche Warnungen nicht für einzelne Zeilen steuerbar?

  Alt 9. Okt 2014, 13:08
Hallo Günther,
in grauer Vorzeit war es so, daß alle Variablen mit einem Wert vorbelegt wurden, es hieß daß auf diese Weise Fehlerursachen vermieden würden. Daran halte ich mich immer noch. Und wenn dann kommt "Variable wurde nicht genutzt", dann fliegt sie raus, es sei denn, sie wird noch für's Debugging benötigt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 23:47 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