Die folgende Datei foo.c
ist eine vereinfachte Version eines subtileren Fehlers, den ich in meinem Code gefunden habe.
Die Zeile a = 42
ist eigentlich ein Tippfehler in meinem Code: Ich meinte b = 42
. Ich erwarte nicht, dass der Compiler erkennt, dass ich einen Tippfehler gemacht habe, aber ich möchte, dass ich eine Warnung bekomme, die ich einer lokalen Variablen (oder einem Funktionsparameter) zuweise, die nicht mehr verwendet wird. Wenn ich diese Datei mit
Ich bekomme absolut keine Warnung. Die Überprüfung des generierten Codes zeigt, dass die Zuweisung a = 42
nicht ausgeführt wird, daher ist gcc
vollkommen bewusst, dass diese Anweisung nutzlos ist (daher potenziell falsch). Wenn Sie den Aufruf von bar(a);
kommentieren, wird eine Warnung warning: parameter ‘a’ set but not used [-Wunused-but-set-parameter]
ausgegeben. Daher scheint gcc
nicht zu warnen, solange a
irgendwo in der Funktion verwendet wird, auch wenn vor die Zuordnung.
Meine Fragen:
bar
entfernt wurde.) Es gibt keine Option gcc
oder clang
, die vor dieser nutzlosen Aufgabe warnen kann.
PC-Lint
dagegen kann in dieser Situation warnen.
Warnung 438 Letzter Wert, der der Variablen 'Symbol' zugewiesen wurde, wurde nicht verwendet. - Ein Wert hatte wurde einer Variablen zugewiesen, die später nicht verwendet wurde. Das Nachricht wird entweder bei einer return - Anweisung oder am Ende einer a - Nachricht ausgegeben Blockieren, wenn die Variable den Gültigkeitsbereich verlässt.
Der Compiler erkennt, dass es sich um einen toten Code handelt, und optimiert ihn trotzdem. Wenn Sie sich die Assembly-Liste ansehen (vorausgesetzt, Sie teilen gcc mit, sie zu optimieren), dann werden Sie feststellen, dass die Zuweisung nicht existiert.
Tags und Links c gcc clang compiler-warnings