C++ 使用C++;

C++ 使用C++;,c++,build,timestamp,versioning,C++,Build,Timestamp,Versioning,我想执行printf()以显示当前执行的代码上次编译的时间。C/C++是否提供了一个在编译过程中解析为时间戳的宏?您可以使用\uuuuuuuu和\uuuuu时间使用宏\uuuuu日期和\uuuuuuuu时间看起来编译器应该提供一个\uuuuuuu时间戳宏,这应该对你的目的有用 16.8预定义宏名称[cpp.预定义] 1以下宏名称应由实现定义: \uuuu行\uuuuu当前源行的行号(十进制常量)。 \uuuu FILE\uuuu源文件的假定名称(字符串文字)。 \uuuu DATE\uuuu源文

我想执行
printf()
以显示当前执行的代码上次编译的时间。C/C++是否提供了一个在编译过程中解析为时间戳的宏?

您可以使用
\uuuuuuuu
\uuuuu时间使用宏
\uuuuu日期
\uuuuuuuu时间看起来编译器应该提供一个
\uuuuuuu时间戳宏,这应该对你的目的有用

16.8预定义宏名称[cpp.预定义]
1以下宏名称应由实现定义:
\uuuu行\uuuuu
当前源行的行号(十进制常量)。
\uuuu FILE\uuuu
源文件的假定名称(字符串文字)。
\uuuu DATE\uuuu
源文件的翻译日期(格式为“Mmm dd yyy”的字符串文字,其中月份名称与asctime函数生成的名称相同,如果值小于10,则dd的第一个字符为空格字符)。如果翻译日期不可用,则提供实现定义的有效日期。
\uuuuu TIME\uuuu
源文件的翻译时间(格式为“hh:mm:ss”的字符串文字,如asctime函数生成的时间)。如果翻译时间不可用,则提供实现定义的有效时间。
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
是否预定义了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
在C++编译时,代码< > CPLUS PLUS < /COD> >名称>代码>
翻译股


如果您使用的是gcc预处理器,那么您将在
\uuuuuuuuuuuuuu
\uuuuuuuu日期

宏中找到所需的内容

GNU C预处理器的报价:

__日期__

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

__时间__

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


使用脚本或创建应用程序生成包含构建日期和时间的C++源文件。将此文件添加到生成设置中。程序的其他部分可以引用此文件中的数据


这种技术在将版本号嵌入程序时也很有用。生成过程可以控制版本号。

我用它向DbgView发送一条消息:

    OutputDebugStringA(("ATTACHED VERSION: "+ string(__DATE__) + " " + string(__TIME__)).c_str());

您使用的是哪种编译器?@Inverse-您可能会修改生成过程,在每次编译时重新创建一个包含
\uuuuuu DATE\uuuuuuuu
\uuuuuuuuuu时间\uuuuuuuuu
宏的文件。我要做的是对makefile进行编程,在编译前触摸包含宏的文件以强制重新生成(理想情况下,包含宏的文件应该很少,如果有其他文件依赖它的话。From:
\uuuuu TIMESTAMP\uuuu
为您提供对文件进行最后一次编辑(!)的日期和时间(而不是编译时间)。@einpoklum:C具有相同的宏列表,以及更多宏,但有一些细微的差异。例如,
\uuuuuu STDC\uu
是“整数常量1,用于表示一致性实现。”,和
\uuuuuCPlusplus
从未定义。C11中的完整列表位于§6.10.8.1。只是为了更好的性能提示:“附加版本:
\uuuuuuuuu日期
”“
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。