webentwicklung-frage-antwort-db.com.de

Warum mag Clang das __DATE__-Makro nicht?

Ich verwende das Makro __DATE__, Um ein Jahr zur Kompilierungszeit zu erhalten:

const QString build_year = __DATE__ + 7;

Das Clang-Code-Modell in QtCreator gibt eine -Wdate-time - Warnung aus, wenn das Makro __DATE__ Verwendet wird.

warning: expansion of date or time macro is not reproducible

Ich kann diese Warnung mit -Wno-date-time Deaktivieren, aber was ist falsch an der Verwendung von __DATE__?

Was ist eine "Erweiterung" des Makros, wie kann es "reproduzierbar" oder "nicht reproduzierbar" sein und warum ist "nicht reproduzierbar" schlecht?

19
yalov

Das Wiederholen von Aufbauten, um binär identische Ausgaben zu reproduzieren, ist unter vielen Gesichtspunkten wünschenswert. Das Erstellen von identischem Quellcode aus identischen Toolketten mit jeweils unterschiedlichen Binärdateien kann schwerwiegende Probleme verbergen.

Wenn Sie nicht jedes Mal, wenn Sie identischen Code erstellen, identische Binärdateien erstellen müssen, deaktivieren Sie diese Warnung. Aus diesem Grund gibt es die Befehlszeilenoption.

41
Stephen M. Webb

Die Warnmeldung sagt Ihnen warum. Die Verwendung des Makros führt nicht zu einer reproduzierbaren Erstellung, da sich sein Wert mit der Zeit ändert. Ein Build im Jahr 2018 und einer im Jahr 2019 wird nicht dieselbe Binärdatei erzeugen.

4
Jesper Juhl