为什么不像__DATE__宏一样?

yal*_*lov 19 c++ clang qt-creator

我使用__DATE__宏来获得编译时间:

const QString build_year = __DATE__ + 7;
Run Code Online (Sandbox Code Playgroud)

QtCreator中的Clang代码模型会引发-Wdate-time使用__DATE__宏的警告.

warning: expansion of date or time macro is not reproducible

我可以禁用此警告-Wno-date-time,但使用时有什么问题__DATE__

什么是宏的"扩展",它如何"可再现"或"不可再现",为什么"不可再现"不好?

Ste*_*ebb 41

从许多观点来看,重复构建再现二进制相同的输出是可取的.从相同的工具链构建相同的源代码,每次都可以提供不同的二进制文件,可以隐藏严重

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

  • 有关该主题的更多信息,请访问https://reproducible-builds.org/ (4认同)
  • [为什么可重现的构建很重要](https://blogs.msdn.microsoft.com/oldnewthing/20180103-00/?p=97705#comment-1319655) (2认同)

Jes*_*uhl 5

警告消息会告诉您原因。使用宏不会产生可重现的构建,因为它的值会随着时间而改变。2018 年的构建和 2019 年的构建不会产生相同的二进制文件。