使用C++在编译时将时间戳嵌入目标代码中

the*_*tor 37 c++ versioning timestamp build

我想执行a printf()来显示上次编译当前正在执行的代码的时间.C/C++是否提供了一个宏,可以让您在编译期间解析为时间戳?

dal*_*lle 31

你可以使用__DATE__和__TIME__.

  • @Inverse - 您可以修改构建过程以在每次编译时重新创建包含`__DATE__`和`__TIME__`宏的文件. (6认同)
  • 我所做的是编译makefile以在编译之前"触摸"包含宏的文件以强制其重建(理想情况下,包含宏的文件应该很少,如果有任何其他文件依赖它. (3认同)
  • 是的,但这仅适用于清理/重建版本 (2认同)

GMa*_*ckG 25

16.8预定义的宏名称[cpp.predefined]
1以下宏名称应由实现定义:
__LINE__当前源行的行号(十进制常量).
__FILE__源文件的假定名称(字符串文字).
__DATE__源文件的转换日期("Mmm dd yyyy"形式的字符串文字,其中月份的名称与asctime函数生成的相同,dd的第一个字符是空格字符,如果该值小于10).如果翻译日期不可用,则提供实现定义的有效日期.
__TIME__源文件的转换时间(形式为"hh:mm:ss"的字符串文字,如asctime函数生成的时间).如果转换时间不可用,则提供实现定义的有效时间.
__STDC__是否__STDC__是预定义的,如果是,它的值是什么,是实现定义的.编译C++转换单元时
__cplusplus,名称__cplusplus定义为值199711L.

你想要的__TIME__可能__DATE__.


FRo*_*owe 6

使用宏__DATE__和__TIME__


hha*_*fez 6

如果您使用的是 gcc 预处理器,那么您将在__TIME__和__DATE__宏中找到您要查找的内容

来自 GNU C 预处理器文档的引用:

__日期__

这个宏扩展为一个字符串常量,它描述了预处理器运行的日期。字符串常量包含 11 个字符,看起来像“Feb 12 1996”。如果一个月中的第几天小于 10,则在左侧填充一个空格。

...

__时间__

这个宏扩展为一个字符串常量,它描述了预处理器运行的时间。字符串常量包含八个字符,看起来像“23:59:01”。