我想使用 printf()
函数显示当前正在执行的代码上次编译的时间戳。在 C/C++ 中是否提供一个宏来解析为编译期间的时间戳?
我想使用 printf()
函数显示当前正在执行的代码上次编译的时间戳。在 C/C++ 中是否提供一个宏来解析为编译期间的时间戳?
您可以使用__DATE__
和__TIME__
。
__DATE__
和__TIME__
宏。 - jschmier16.8 预定义的宏名称 [cpp.predefined]
1 实现必须定义以下宏名称:
__LINE__
当前源代码行号(十进制常量)。
__FILE__
源文件的推测名称(一个字符字符串字面值)。
__DATE__
源文件的翻译日期(形如 "Mmm dd yyyy" 的字符字符串字面值,其中月份的名称与 asctime 函数生成的相同,如果 dd 的值小于 10,则 dd 的第一个字符是空格字符)。 如果没有可用的翻译日期,则提供实现定义的有效日期。
__TIME__
源文件的翻译时间(形如 "hh:mm:ss" 的字符字符串字面值,与 asctime 函数生成的时间相同)。 如果没有可用的翻译时间,则提供实现定义的有效时间。
__STDC__
是否预定义了__STDC__
及其值是什么,由实现定义。
__cplusplus
在编译 C++ 翻译单元时,名称__cplusplus
被定义为值 199711L。
您需要使用 __TIME__
和可能是 __DATE__
。
__STDC__
是“整数常量1,旨在表示符合实现”,而__cplusplus
则从未定义。C11中完整的列表在§6.10.8.1中。 - GManNickG使用宏__DATE__
和__TIME__
__TIME__
和__DATE__
宏中找到您要查找的内容。看起来编译器应该提供一个__TIMESTAMP__
宏,这对你的目的应该有效。
OutputDebugStringA(("ATTACHED VERSION: "+ string(__DATE__) + " " + string(__TIME__)).c_str());
您可以将以下字符串添加到CMakeLists.txt文件中
string(TIMESTAMP COMPILE_TIME %Y%m%d-%H%M%S)
而且
你需要将以下字符串添加到你的 "ProjectName.h.in" 文件中
#define TIMESTAMP @COMPILE_TIME@
然后当您编译项目时,下面的字符串将被写入您的 "ProjectName.h" 文件中。
#define TIMESTAMP 20230220-203532