Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Manche Warnungen nicht für einzelne Zeilen steuerbar? (https://www.delphipraxis.net/182198-manche-warnungen-nicht-fuer-einzelne-zeilen-steuerbar.html)

Der schöne Günther 8. Okt 2014 19:05

Manche Warnungen nicht für einzelne Zeilen steuerbar?
 
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
Delphi-Quellcode:
DEFAULT
setzen. Tue ich das innerhalb, bekomme ich trotzdem eine Warnung, als hätte ich sie nie ausgeschaltet.

Sir Rufo 8. Okt 2014 23:05

AW: Manche Warnungen nicht für einzelne Zeilen steuerbar?
 
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
Delphi-Quellcode:
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 ;)

Stevie 9. Okt 2014 06:53

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

Zitat von Der schöne Günther (Beitrag 1275301)
Ganz abgesehen davon dass die vom Compiler erzeugte Warnung übervorsichtig (=falsch) ist, warum kann ich sie nicht gezielt unterdrücken?


Delphi-Quellcode:
someValue := nil;
in die erste Zeile und der Drops is gelutscht...

Der schöne Günther 9. Okt 2014 09:22

AW: Manche Warnungen nicht für einzelne Zeilen steuerbar?
 
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
Delphi-Quellcode:
someValue := Nil
einfügen und dann natürlich noch ein
Delphi-Quellcode:
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.

himitsu 9. Okt 2014 10:06

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

Zitat von Der schöne Günther (Beitrag 1275353)
Delphi-Quellcode:
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. :angel:
Delphi-Quellcode:
if Assigned(someValue) then ;

Stevie 9. Okt 2014 10:10

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

Zitat von Der schöne Günther (Beitrag 1275353)
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
Delphi-Quellcode:
someValue := Nil
einfügen und dann natürlich noch ein
Delphi-Quellcode:
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.

uligerhardt 9. Okt 2014 10:10

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

Zitat von Der schöne Günther (Beitrag 1275353)
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)?

p80286 9. Okt 2014 12:08

AW: Manche Warnungen nicht für einzelne Zeilen steuerbar?
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:24 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