AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE USE_BEFORE_DEF kann nicht ausgeschaltet werden ?
Thema durchsuchen
Ansicht
Themen-Optionen

USE_BEFORE_DEF kann nicht ausgeschaltet werden ?

Ein Thema von charly52 · begonnen am 14. Nov 2022 · letzter Beitrag vom 19. Nov 2022
Antwort Antwort
charly52

Registriert seit: 2. Sep 2018
Ort: Salem, Baden
102 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

USE_BEFORE_DEF kann nicht ausgeschaltet werden ?

  Alt 14. Nov 2022, 12:17
Hi all,

ich möchte in folgendem Code

Delphi-Quellcode:
begin
  IF Gesperrt0(aCol,-1) THEN
  BEGIN
    aFarbe:= DG0_AbtlNamen.Canvas.Brush.Color;
  END;


  Dann was tun
  

{$WARN USE_BEFORE_DEF OFF}
  IF Gesperrt0(aCol,-1) THEN DG0_AbtlNamen.Canvas.Brush.Color:= aFarbe;
{$WARN USE_BEFORE_DEF ON}
end;

die Warnung

[dcc32 Warning] xxxxxx.PAS(281): W1036 Variable 'aFarbe' might not have been initialized

loswerden. Hier in einem Tutorial habe ich gefunden, daß USE_BEFORE_DEF OFF genau dafür zuständig sei.
Scheint aber nicht so zu sein, da ich die Warnungen immer noch bekomme.
Ich finde auch keinen anderen Eintrag in der Liste der Warnungen.

{$WARN USE_BEFORE_DEF ON}
Warnung: Variable '<Element>' ist möglicherweise nicht initialisiert worden
Diese Warnung wird angezeigt, wenn einer Variablen nicht in jedem Codepfad, der zu der Stelle führt, an der sie verwendet wird, ein Wert zugewiesen wird.


Danke Charly

Geändert von charly52 (14. Nov 2022 um 12:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: USE_BEFORE_DEF kann nicht ausgeschaltet werden ?

  Alt 14. Nov 2022, 12:54
Warum nicht den eigentlichen Fehler beheben?

Sorge dafür, dass der Variable auch bei ELSE etwas zugewiesen ist und Problem gelöst. (oder vor dem ersten IF)



PS: Delphi-Referenz durchsuchenTBrushRecall
https://www.delphipraxis.net/1288015-post5.html

[add]
Delphi-Quellcode:
begin
  Recall := nil;
  IF Gesperrt0(aCol,-1) THEN
  BEGIN
    Recall := TBrushRecal.Create(DG0_AbtlNamen.Canvas.Brush);
  END;


  Dann was tun
  

  Recall.Free; // unnötig nochmal Gesperrt0 auszuführen, weil intern über Assigned(Recall), im Free, die vorherrige Ausführung oder Nicht-Ausführung erkannt wird
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Nov 2022 um 14:36 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.038 Beiträge
 
Delphi 12 Athens
 
#3

AW: USE_BEFORE_DEF kann nicht ausgeschaltet werden ?

  Alt 14. Nov 2022, 13:05
Hallo,

mir scheint, du willst die Warnung unterdrücken.
Das ist aber in vielen Fällen nicht der richtige Ansatz!

Schau dir nochmal deinen Code an und überlegt, ob der Compiler nicht doch recht damit hat,
dass es Fälle gibt, in denen du dieser Farbvariablen nichts zuweist.

Welche Farbe soll die dann haben?

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
706 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: USE_BEFORE_DEF kann nicht ausgeschaltet werden ?

  Alt 14. Nov 2022, 14:17
Ich frage mich ehrlich warum es so einen Unsinn überhaupt gibt!
Warum soll man dabei unterstützt werden unsauber zu programmieren?

Wo ist im Beispiel eigentlich das Problem die Variable mit einer sinnvollen Farbe zu initialiseren?
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: USE_BEFORE_DEF kann nicht ausgeschaltet werden ?

  Alt 14. Nov 2022, 14:39
Hier ist die Meldung berechtig.

Ich habe kenne aber auch zwei Fälle, wo diese Meldung kommt, obwohl alles richtig in allen möglichen Pfaden initialisiert wurde.
Um dort die verbuggte Meldung loszuwegen, ist das Abschalten schon nett. (OK, weil ich garnicht auf die Idee kam, dass man explizit genau Dieses einzeln abschalten kann, wurde dort WARN komplett deaktiviert)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.176 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: USE_BEFORE_DEF kann nicht ausgeschaltet werden ?

  Alt 14. Nov 2022, 15:15
Ich frage mich ehrlich warum es so einen Unsinn überhaupt gibt!
Prinzipiell hast du Recht, dass diese Compiler-Anweisungen nicht dazu genutzt werden sollen, um unsauberen Code zu „verdecken“.
Es gibt aber durchaus Situationen, wo man das anwenden kann. Z.B. Hinweise auf Plattformabhängigkeiten. Die will ich nicht in den Projektoptionen generell ausschalten, aber bei bestimmten Funktionen möchte ich die Hinweise unterdrücken können.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch
Online

Registriert seit: 11. Aug 2012
Ort: Essen
1.679 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: USE_BEFORE_DEF kann nicht ausgeschaltet werden ?

  Alt 14. Nov 2022, 16:10
Ich frage mich ehrlich warum es so einen Unsinn überhaupt gibt!
Warum soll man dabei unterstützt werden unsauber zu programmieren?

Wo ist im Beispiel eigentlich das Problem die Variable mit einer sinnvollen Farbe zu initialiseren?
Es gibt bei den Warnungen leider auch False Positives, zumindest bei älteren Compilern.
Wenn man es dem alten Compiler dann recht macht, indem man eine Zuweisung einfügt, motzen neuere, dass der zugewiesene Wert nicht benutzt würde. Und schon ist man dann entweder bei IFDEF oder bei WARN xxx OFF.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: USE_BEFORE_DEF kann nicht ausgeschaltet werden ?

  Alt 14. Nov 2022, 17:53
auch in noch 11.2
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
charly52

Registriert seit: 2. Sep 2018
Ort: Salem, Baden
102 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: USE_BEFORE_DEF kann nicht ausgeschaltet werden ?

  Alt 18. Nov 2022, 17:16
Hi Leute,

die vielen Antworten sind ja schon toll.

ABER, die Frage war:

Weiß jemand ob man mit {$WARN USE_BEFORE_DEF OFF} die Warnung, um die es in der Frage ging, einfach nicht abschalten kann, oder ob ich schlicht was falsch mache.
Der Code steht gar nicht zur Debatte.

Und er ist auch nicht falsch oder gefährlich, sondern einfach so, daß der Compiler an der Stelle, wo die Variable benutzt wird wohl vergessen hat, daß unter der selben Bedingung, die zum zurücksetzen benutzt wird, weiter oben auch ein Wert zugewiesen wurde.

Und entschuldigt bitte die späte Reaktion. War anderweitig unterwegs

Charly
  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 13:47 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-2025 by Thomas Breitkreuz