我想执行一个printf()
来显示上次编译当前正在执行的代码的时间。 C / C ++是否提供了一个宏,可以让您在编译期间解析为时间戳?
答案 0 :(得分:29)
您可以使用__DATE__
和__TIME__
。
答案 1 :(得分:23)
16.8预定义的宏名称[cpp.predefined]
1以下宏名称应由实施定义:
__LINE__
当前源行的行号(十进制常量)__FILE__
源文件的假定名称(字符串文字)__DATE__
源文件的转换日期(“Mmm dd yyyy”形式的字符串文字,其中月份的名称与asctime函数生成的相同,以及dd的第一个字符如果值小于10,则为空格字符。如果没有翻译日期,则提供实施定义的有效日期__TIME__
源文件的转换时间(形式为“hh:mm:ss”的字符串文字,如asctime函数生成的时间)。如果翻译时间不可用,则提供实施定义的有效时间__STDC__
__STDC__
是否已预先定义,如果是,它的值是什么,是实现定义的__cplusplus
编译C ++时,名称__cplusplus
被定义为值199711L 翻译单位。
您想__TIME__
,可能__DATE__
。
答案 2 :(得分:6)
使用宏__DATE__
和__TIME__
答案 3 :(得分:4)
如果您使用的是gcc预处理器,那么您可以在__TIME__
和__DATE__
宏中找到所需内容
来自GNU C预处理器documentation的引言:
__ DATE __
此宏扩展为一个字符串常量,该常量描述预处理器运行的日期。字符串常量包含11个字符,看起来像“1996年2月12日”。如果当月的日期小于10,则在左侧填充空格。
...
__ TIME __
此宏扩展为一个字符串常量,该常量描述预处理器的运行时间。字符串常量包含八个字符,看起来像“23:59:01”。
答案 4 :(得分:2)
使用脚本或创建应用程序来生成包含构建日期和时间的C ++源文件。将此文件添加到构建设置。程序的其他部分可以引用此文件中的数据。
此技术对于将版本号嵌入程序也很有用。构建过程可以控制版本号。
答案 5 :(得分:0)
看起来编译器应该提供一个__TIMESTAMP__
宏,它应该适用于您的目的。
答案 6 :(得分:0)
我使用它向DbgView发送消息:
OutputDebugStringA(("ATTACHED VERSION: "+ string(__DATE__) + " " + string(__TIME__)).c_str());