Warum gibt gcc Fehler von nicht verwendeten Variable für lokale Variablen, aber nicht für globale Variablen?

StackOverflow https://stackoverflow.com/questions/664414

  •  21-08-2019
  •  | 
  •  

Frage

Ich habe eine Frage in Bezug auf gcc. Warum bekomme ich einen Fehler von nicht verwendeten Variable, wenn ich die Variable lokal in einer Funktion definieren, aber nicht, wenn die Variable ist global in einer einzigen Datei?.

kann ich verstehen, dass es sonst Verwendung für jemanden sein kann, aber das tun, dann muss ich Recht, das äußere Wort setzen?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Wenn von „global in einer einzigen Datei“, meinen Sie "int x;" außerhalb jeder Funktion, die es ist nicht der Compiler Job, das zu erkennen, muss die Variable an den Linker, falls verfügbar sein ein anderes Kompilierungseinheit es braucht (wie errno).

Wenn Sie "static int x" gemeint, wo es nicht an den Linker zur Verfügung gestellt, das ist wahrscheinlich nur eine Wahl von GCC gemacht. Ich glaube nicht, Compiler sind erforderlich davon benachrichtigen, und es macht keinen wirklichen Schaden, die andere als ein paar Bytes im Adressraum zu verschwenden.

Andere Tipps

Der Compiler hat keine Möglichkeit zu wissen, ob eine globale Variable verwendet wird - es von einer Übersetzungseinheit in einer ganz anderen Sprache geschrieben verwendet werden könnte, zum Beispiel

.

Da globale Variablen können an jedem anderen Ort verwendet werden, die der Compiler nicht bekannt ist, kann. Zum Beispiel auf einem externen Bibliothek o Programm.

Nicht verwendeter Einheimische kann vom Compiler bestimmt werden. Nicht verwendete Globals kann nur durch den Linker bestimmt werden, da sie über Objektdateien gemeinsam genutzt werden.

In der Regel ist der Linker nicht tut Warnungen für Code-gen.

Wenn die Variable global ist, hat der Compiler nicht einen vollständigen Überblick über alle Übersetzungseinheiten im Projekt - die Variable in einer anderen Übersetzungseinheit modifiziert werden könnte. Der Linker ist in der Lage zu sagen, dass er nicht benutzt wird, wahrscheinlich aus der Objektdatei entfernt werden.

Denn wenn es global ist es durch ein anderes Modul verwendet werden, die in späteren verknüpft werden.

Es ist eine gemeinsame Idiom alle Globals in einer einzigen Datei definiert haben. Diese Datei nicht einmal einen Code haben, viel weniger Code, der alle Variablen verwendet.

Ich habe die gleiche Frage auf, wenn ich die dalvikVM in android2.3 bauen, und ich habe den Schlüssel des Punktes. Es liegt daran, dass die Parameter des Compilers zu streng ist:

LOCAL_CFLAGS + = Werror .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top