Ich habe das gleiche Problem wie dieser Typ . Kompilieren mit clang und ccache Ich erhalte diese Warnung jedes Mal, wenn sie auf ein Q_OBJECT trifft:
%Vor%Dies passiert nur, wenn ccache verwendet wird, das Kompilieren des gleichen Codes mit clang alleine funktioniert gut.
Es scheint ein ähnliches Problem mit Makroerweiterungen zu geben Die vorgeschlagene Lösung besteht darin, die Umgebungsvariable
festzulegen %Vor%Leider scheint dies mein Problem nicht zu beheben, oder vielleicht mache ich es falsch.
Ich habe es versucht:
Erstellen von der Befehlszeile mit
CCACHE_CPP2=yes ninja
export CCACHE_CPP2=yes
ninja
Erstellen von Qt Creator, indem Sie CCACHE_CPP2
zu "Build Environment" hinzufügen
Gibt es noch etwas, das ich tun kann, um dieses Makro-Erweiterungsproblem zu beheben? Ich möchte Warnungen nicht global (weil das schlecht ist) oder lokal (weil das bedeutet, alle Makros in Compiler-spezifischen Boilerplate zu enthalten) deaktivieren.
Fügen Sie den CPP-Flags -Wo-self-assign hinzu. Es sollte Ihnen ermöglichen, Selbstzuweisungsfehler zu deaktivieren:
%Vor%oder
%Vor%Verzeihen Sie, dass ich nicht geklingelt habe, um das zu testen, aber ich fühlte, dass ich trotzdem helfen sollte. Wenn man Mareks Antwort erweitert, gibt es die Möglichkeit, das Pragma in eine andere Makroexpansion zu integrieren. Es ist eine sehr hässliche Lösung, aber auf diese Weise müssen Sie das Makro nur einmal definieren, anstatt über die gesamte Codebasis hinweg Pragmas zu erzeugen.
%Vor%Wie Sie sehen können, habe ich es mit gcc getestet (ich habe momentan keine Möglichkeit, mit clang zu testen), aber das sollte gut funktionieren, wenn "GCC" durch "clang" innerhalb des Makros ersetzt wird (und -Wass_zuweisung verwendet wird) ). Anwenden auf dein Problem (Pseudocode):
%Vor%Ein weiterer hässlicher Nachteil ist, dass ich, zumindest auf gcc, den Präprozessor zweimal laufen lassen musste, damit er funktionierte. Kann nicht sagen, ob das gleiche für den Klang notwendig ist.
IMO ignoriert diese Warnung global ist kein Problem. Es warnt vor Dummy-Code und nicht vor möglichen logischen Fehlern, die durch Tippfehler verursacht werden. Deshalb habe ich @MichaelCMS Antwort gewählt.
Aber es gibt einen Weg nur die Warnung zu deaktivieren ist ein Teil des Codes :
%Vor%Das sollte den Trick machen (wenn ich den Flaggennamen nicht vermasselt habe), aber ich mag es nicht, zu vielen Kesselplatten-Makros.