Ich arbeite in dem Prozess, C-Code zu entfernen, der Variablen verwendete, die in einer Headerdatei deklariert wurden. Mein Compiler warnt aus irgendwelchen Gründen nicht vor unbenutzten Variablen aus der Header-Datei. Was ist die Option, um unbenutzte Variable aus einer Header-Datei aufzurufen. Es tut es aber von der C-Datei.Wie bekomme ich ungenutzte Variable Warnung aus der Header-Datei?
Antwort
Erstens, der Compiler als solcher ist nicht einmal bewusst, ob eine Variable in einer Header-Datei oder in der .c-Datei deklariert wird - Nachdem der Präprozessor ausgeführt wurde, ist dies nicht zu unterscheiden.
Was Sie normalerweise in einer Header-Datei deklarieren, ist externe Referenzen, d. H. Variablen der Storage-Klasse external
. Kein Compiler, den ich kenne, warnt, wenn eine solche Variable nicht verwendet wird - Viele System-Header-Dateien deklarieren solche Variablen, und Sie würden mit Warnungen überflutet werden (errno
oder stderr
sind beachtenswerte Beispiele) - Sie wollen nicht gewarnt werden jede Quelldatei, die nicht verwendet errno
oder stderr
)
Compiler können Warnungen für nicht verwendete static
Variablen und nicht verwendete Funktionsparameter ausgeben. Die Verwendung und der Umfang solcher Variablen ist auf die aktuelle Kompilierungseinheit oder Funktion beschränkt und "niemand könnte sie möglicherweise verwenden", so dass es sinnvoll ist, zu warnen. extern
Variablen können sehr gut von anderen Objektdateien verwendet werden, für die der Compiler keine Warnung ausgeben könnte - Ein richtiger Linker würde jedoch erkennen, dass ein externes Symbol von keiner Objektdatei verwendet wird und diese Variable automatisch aus dem Objekt entfernt letzte ausführbare Datei - Keine Warnung erforderlich, da sie vom Kompilierungssystem repariert werden kann.
Für C-Compiler gibt es keinen Unterschied zwischen Header (enthalten) und jeder anderen C-Source-Datei.
Der Compiler muss keine Warnmeldung über nicht verwendete globale Daten ausgeben, da diese Daten von einer anderen Software verwendet werden können.
Wenn Sie Bedenken haben, dass ein Teil der Daten nur im Bereich einer einzelnen Objektdatei verwendet wird, versuchen Sie, diese Datendefinition mit dem Schlüsselwort static
vorzuziehen, und erstellen Sie die Software neu. Wenn nach einiger Zeit alles noch gut funktioniert und Sie sicher sind, dass jede mögliche (faule) dynamische Verbindung immer noch glücklich sein wird, Stück der globalen Daten zu verlieren, die Sie gerade entfernt haben - es ist wirklich 100% sicher, es zu entfernen.
Ihr letzter Vorschlag ist wahrscheinlich keine gute Idee: Wenn in 15 Quelldateien dieselbe Kopfzeile mit der gleichen 'statischen' Definition (' statisch' ist * immer * eine Definition) enthalten ist, haben Sie 15 Instanzen derselben Variablen Wenn Sie es so belassen, wie es war (keine "statische"), hätte der Linker sich über mehrere Definitionen beschwert. Ihr Vorschlag ist nur in einer .c-Datei sinnvoll. – tofro
Bei zweiten Gedanken, erhalten Sie eine Warnung für nicht verwendete 'statische' - So könnte es wirklich helfen, Orte zu erkennen, die diese Variable nicht verwenden. – tofro
@tofro Ja, du bekommst genau richtig. Gib mir +1 :) – sqrt163
- 1. Wie bekomme ich die erste ungenutzte ID in der Tabelle?
- 2. WebStorm - Ungenutzte Param-Warnung unterdrücken JavaScript
- 3. Wie bekomme ich eine JavaScript-Variable aus der MySQL-Datenbanktabelle?
- 4. Wie finde ich ungenutzte Faktorstufen?
- 5. Wie kann ich ungenutzte Ebenen aus einem Datenrahmen löschen?
- 6. Wie bekomme ich eine Variable aus einer separaten Textdatei
- 7. Wie bekomme ich eine Variable aus einem try/catch-Block?
- 8. Wie elegant diese unbenutzte Variable Warnung zu beheben?
- 9. Wie bekomme ich Zahlen aus der Zeichenfolge?
- 10. Wie bekomme ich RelativeLayout als Variable?
- 11. Warum bekomme ich eine ungeprüfte Warnung?
- 12. PHP bekomme Variable aus einer anderen Datei
- 13. Wie bekomme ich Details der Daten aus der Datenbank?
- 14. Wie bekomme ich Daten aus der Liste der Formulare richtig?
- 15. Wie bekomme ich Werte aus dem Wörterbuch in Jinja, wenn der Schlüssel eine Variable ist?
- 16. Kann ein sehr langes Klassenfunktionsmember in der Headerdatei definiert werden?
- 17. ungenutzte Ressourcen vor Versand
- 18. Wie bekomme ich Informationen aus Tabelle
- 19. Wie bekomme ich Text aus Textdaten?
- 20. Wie bekomme ich den Kontext aus der Absicht?
- 21. Wie bekomme ich eine Anwendung aus der Sicht?
- 22. Wie bekomme ich cygpath, um die Eingabe aus der Datei
- 23. Android Wie bekomme ich eine Zeichenfolge aus der Zwischenablage onPrimaryClipChanged?
- 24. Wie bekomme ich alle Schlüssel aus der Eigenschaftendatei?
- 25. Wie bekomme ich die Nummer aus der Argumentzeile?
- 26. Wie bekomme ich Daten aus der bestehenden MongoDB-Datenbank?
- 27. ZF2: Wie bekomme ich ServiceManager-Instanz aus der benutzerdefinierten Klasse
- 28. Wie bekomme ich Daten aus der ausgewählten Zeile von datagridview
- 29. Wie bekomme ich ApplicationID aus der Apache Apex-Anwendung?
- 30. Wie bekomme ich Daten aus der Ganglia-Datenbank?
Sie erhalten diese nicht, weil andere C-Dateien den Header enthalten und die Variablen verwenden können. Wenn Sie diese erhalten wollten, müssten Sie sie vorübergehend in eine C-Datei verschieben. – merlin2011
Das Definieren einer Variablen in einer Header-Datei wird im Allgemeinen als schlechte Methode betrachtet - Sie können * deklarieren *, aber nicht * definieren *. Und wenn es dort nur * deklariert * und nicht benutzt wird, gibt es normalerweise keine Warnung vom Compiler (es tut nichts, aber es kostet nichts). Bist du sicher, dass du Variablen wirklich * definierst? Kannst du ein paar Beispiele geben? – tofro
Wenn ein Compiler _all_ die Quelldateien, die 'foo.h' enthalten, nicht sehen kann, kann er nicht wissen, ob ein' foo.h' deklariertes Objekt nicht verwendet wird. Klingt wie ein Job für den Linker. – chux