In einem großen Projekt habe ich einige Compiler-Warnungen von g ++ - 5.1.1 erhalten nur beim Erstellen der Release-Version (die Optimierungsflags verwendet), aber nicht Beim Erstellen der Debug-Version (die die meisten Compiler-Optimierung deaktiviert). Ich habe das Problem auf ein minimales Beispiel beschränkt, das unten mit Befehlen aufgeführt ist um das Problem zu reproduzieren. Das Problem tritt nicht auf, wenn ich g ++ - 4.8.4 verwende. Ist Dies ist ein Fehler in g ++ - 5.1.1? Oder macht dieser Code etwas, das zu Recht falsch ist und diese Warnung rechtfertigt? Warum erzeugt es keine Warnungen für die letzten drei Fälle, die im Code aufgeführt sind (siehe unten, um eine Erklärung zu erhalten)?
Für diejenigen, die daran interessiert sind, hier ist der Fehlerbericht in GCC's Bugzilla.
%Vor% Bearbeiten: Wie von Ryan Haining in den Kommentaren erwähnt, haben container_2
und container_3
extern
linkage und der Compiler hat keine Möglichkeit, vor deren Verwendung zu warnen.
Das sieht wie ein Fehler aus, wenn wir uns die Dokumentation für -Wunused-Variable ansehen es sagt ( Hervorhebung meins ):
Diese Option impliziert -Wunused-const-Variable für C, aber nicht für C ++
und wenn wir -Wunused-const-variable
betrachten, heißt es:
Warne, wenn eine konstante statische Variable außer ihrer nicht verwendet wird Erklärung. Diese Warnung wird von -Wunused-Variable für C, aber aktiviert nicht für C ++. In C ++ ist das normalerweise kein Fehler seit const Variablen ersetzen den Platz von #defines in C ++.
und wir können sehen, dass diese Warnung in der Hauptversion von gcc verschwindet.
Dieser gcc-Fehlerbericht: -Wunused-Variable ignoriert nicht verwendete const initialisierte Variablen ist ebenfalls relevant . Obwohl es gegen C ist, wird auch der C ++ - Fall diskutiert.