Je utilise le __DATE__
macro pour obtenir une année de compilation:
const QString build_year = __DATE__ + 7;
Le modèle de code Clang dans QtCreator lance un -Wdate-time
avertissement pour l'utilisation de __DATE__
macro.
warning: expansion of date or time macro is not reproducible
Je peux désactiver cet avertissement avec -Wno-date-time
, mais qu'est-ce qui ne va pas avec __DATE__
?
Qu'est-ce qu'une "expansion" de la macro, comment peut-elle être "reproductible" ou "non reproductible", et pourquoi "non reproductible" est-elle mauvaise?
Avoir des builds répétés reproduisant des sorties binaires identiques est souhaitable à plusieurs points de vue. Construire du code source identique à partir de chaînes d'outils identiques en donnant à chaque fois des binaires différents pourrait cacher de sérieux problèmes.
Si vous n'avez pas besoin de produire des fichiers binaires identiques à chaque fois que vous créez un code identique, désactivez simplement cet avertissement. c'est pourquoi le commutateur de ligne de commande existe.
Le message d'avertissement vous explique pourquoi. L'utilisation de la macro n'entraîne pas de génération reproductible car sa valeur changera avec le temps. Une build en 2018 et une en 2019 ne produiront pas le même binaire.