c++ clang qt-creator

c++ - ¿Por qué a Clang no le gusta la macro__DATE__?



qt-creator (2)

Utilizo la macro __DATE__ para obtener un año de compilación:

const QString build_year = __DATE__ + 7;

El modelo de código de Clang en QtCreator lanza una -Wdate-time para usar la macro __DATE__ .

warning: expansion of date or time macro is not reproducible

Puedo deshabilitar esta advertencia con -Wno-date-time , pero ¿qué hay de malo en usar __DATE__ ?

¿Qué es una "expansión" de la macro, cómo puede ser "reproducible" o "no reproducible", y por qué "no es reproducible" es malo?


El mensaje de advertencia te dice por qué. El uso de la macro no da como resultado una construcción reproducible ya que su valor cambiará con el tiempo. Una compilación en 2018 y una en 2019 no producirán el mismo binario.


Tener repetidas construcciones reproducen salidas binarias idénticas es deseable desde muchos puntos de vista. La construcción de código fuente idéntico a partir de cadenas de herramientas idénticas que dan binarios diferentes cada vez podría ocultar problemas graves.

Si no necesita generar binarios idénticos cada vez que genere un código idéntico, simplemente desactive esa advertencia. Es por eso que existe el interruptor de línea de comandos.