Почему Клану не нравится макрос __DATE__?

Я использую макрос __DATE__ для получения времени компиляции:

const QString build_year = __DATE__ + 7;

Модель кода Клана в QtCreator выдает предупреждение -Wdate-time для использования макроса __DATE__.

warning: expansion of date or time macro is not reproducible

Я могу отключить это предупреждение с -Wno-date-time, но что не так с помощью __DATE__?

Что такое "расширение" макроса, как оно может быть "воспроизводимым" или "не воспроизводимым", а почему "не воспроизводимо" плохо?

Ответ 1

Повторяющиеся сборки воспроизводят двоично-идентичные выходы желательно со многих точек зрения. Создание идентичного исходного кода из идентичных цепей инструментов, дающих разные бинарные файлы, каждый раз может скрыть серьезные проблемы.

Если вам не нужно создавать идентичные двоичные файлы каждый раз, когда вы создаете идентичный код, просто отключите это предупреждение. почему коммутатор командной строки существует.

Ответ 2

Предупреждающее сообщение сообщает вам, почему. Использование макроса не приводит к воспроизводимой сборке, так как ее значение будет меняться со временем. Сборка в 2018 году и одна в 2019 году не будут производить один и тот же двоичный файл.