g ++ - 5.1.1 warnt vor ungenutzten Variablen nur, wenn das Optimierungs-Flag verwendet wird

8

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.

    
crayzeewulf 03.10.2015, 00:45
quelle

1 Antwort

1

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.

    
Shafik Yaghmour 03.10.2015, 02:23
quelle

Tags und Links