为什么Clang不喜欢__DATE__宏?

时间:2018-10-19 17:46:32

标签: c++ clang qt-creator

我使用__DATE__宏来获取编译时间年份:

const QString build_year = __DATE__ + 7;

QtCreator中的Clang代码模型针对使用-Wdate-time宏而引发__DATE__警告。

warning: expansion of date or time macro is not reproducible

我可以使用-Wno-date-time禁用此警告,但是使用__DATE__怎么了?

什么是宏的“扩展”,它如何是“可再现的”或“不可再现的”,为什么“不可再现的”是坏的?

2 个答案:

答案 0 :(得分:38)

从许多角度来看,希望具有重复的生成来复制二进制相同的输出。从相同的工具链构建相同的源代码,每次给出不同的二进制文件,可能会隐藏严重的问题。

如果您不需要在每次构建相同的代码时都生成相同的二进制文件,请禁用该警告。这就是存在命令行开关的原因。

答案 1 :(得分:4)

警告消息告诉您原因。使用宏不会导致可复制的构建,因为其值会随着时间变化。 2018年的版本和2019年的版本将不会生成相同的二进制文件。