Warum gibt es keine Warnung oder Hinweis, wenn eine Konstante nicht verwendet wird?

8

Ich habe versucht, einer anderen Person etwas Code zu zeigen, als ich subtil bemerkte, dass neben den deklarierten Variablen Compiler-Hinweisnachrichten vorhanden sind, es keine Hinweise oder Meldungen gibt, wenn eine deklarierte Konstante nicht verwendet wird. Der folgende Code ist ein Beispiel:

%Vor%

Warum gibt es keinen Hinweis auf die nicht verwendete Konstante? Gibt es eine logische Erklärung für diesen Unterschied?

    
EMBarbosa 16.04.2014, 16:30
quelle

2 Antworten

7

Lassen Sie uns direkt in ein Beispiel springen. Nehmen wir an, Sie schreiben eine DLL mit einer exportierten Funktion. Einer dieser Parameter der Funktion ist eine Ganzzahl ...

%Vor%

Nehmen wir an, Sie haben mehrere Konstanten definiert, um alle möglichen Integer-Werte darzustellen, die diese Funktion möglicherweise erkennt ...

%Vor%

Nun sagen wir, wenn Sie diese Funktion implementieren, brauchen Sie nur die erste CON_ONE , aber nicht die anderen beiden. Würdest du wirklich einen Hinweis für jeden von diesen wollen?

Ein realistischeres Beispiel sind Dinge wie HKEY_LOCAL_MACHINE , HKEY_CURRENT_USER usw., die mit Delphi kommen (gebunden an Windows API-Aufrufe). Sehen Sie sich einfach alle Konstanten in Windows.pas an. Stellen Sie sich vor, alle diese möglichen Konstanten hätten einen Compiler-Hinweis ausgelöst.

Wenn Sie einen Compiler-Hinweis auf eine nicht verwendete Variable erhalten, bedeutet das meistens einen Codierungsfehler (oder etwas, das Sie vergessen haben zu löschen), während eine unbenutzte Konstante normalerweise nur eine nicht implementierte Fähigkeit bedeutet.

    
Jerry Dodge 16.04.2014, 16:34
quelle
4

Interessante Frage.

Für Konstanten (und Variablen), die im Interface-Abschnitt einer Unit deklariert sind, ist es ziemlich einfach zu verstehen, warum unbenutzte Exemplare keinen Compiler-Hinweis auslösen: Alles innerhalb des Interface-Abschnitts wird zur Verwendung für die Einheit nach außen veröffentlicht kann mir nicht bewusst sein. Als Programmierer einer Einheit bieten / präsentieren Sie mögliche Werte, die Benutzer Ihrer Einheit in ihrem Code verwenden können, obwohl die Einheit sie nicht notwendigerweise in ihrer Implementierung verwenden muss. Zum Beispiel Consts.pas , eine Einheit, deren einziger Zweck darin besteht, Konstanten (ok, resourcestrings) für andere Zwecke zu verwenden.

Für Konstanten, die im Implementierungsteil einer Unit deklariert wurden, und - wie in Ihrem Codebeispiel ersichtlich - scheinbar auch für in der Programmdatei deklarierte Konstanten, scheint mir kein klarer Grund dafür zu bestehen, warum es keinen Hinweis auf unbenutzte Konstanten gibt .

Und als Zugabe ist der Grund, warum initialisierte Variablen im Implementierungsabschnitt keine Hinweise auslösen, weil sie eigentlich eine Verkettung einer Variablendeklaration und einer Zuweisungsanweisung sind, also eine initialisierte Variable aus Kompilierersicht verwendet wird / p>     

NGLN 17.04.2014 21:18
quelle