我有以下小程序:
#include <iostream>
int main() {
std::cout << "Time: " << __TIME__ << std::endl;
std::cout << "Timestamp: " << __TIMESTAMP__ << std::endl;
return 0;
}
产生以下输出:
正如您所看到的,__TIME__
与__TIMESTAMP__
有很大差异,提前4秒 。
为什么会这样?两次之间怎么会有这样的差异?
即使程序的构建时间不到4秒,所以这种差异来自哪里?
答案 0 :(得分:12)
这两个宏完全不同:
__TIME__
此宏扩展为一个字符串常量,用于描述预处理器运行的时间。字符串常量包含八个字符,看起来像“
23:59:01
”。 如果GCC无法确定当前时间,它将发出警告消息(每次编译一次),__TIME__
将扩展为“??:??:??
”。
(source)
__TIMESTAMP__
此宏扩展为字符串常量,该常量描述上次修改当前源文件的日期和时间。字符串常量包含星期,月,月中的缩写日期,以hh:mm:ss形式,年份的时间,看起来像“
Sun Sep 16 01:03:52 1973
”。如果该月的日期小于10,则在左侧填充空格。如果GCC无法确定当前日期,它将发出警告消息(每次编译一次),
__TIMESTAMP__
将扩展为“??? ??? ?? ??:??:?? ????
”。
(source)
__TIME__
:当前源文件的最新编译时间。时间是 hh:mm:ss 形式的字符串文字__TIMESTAMP__
:上次修改当前源文件的日期和时间,表示为字符串文字,格式为 Ddd Mmm Date hh:mm:ss yyyy ,其中 Ddd 是一周的缩写日期,日期是1到31之间的整数。
(source)
答案 1 :(得分:0)
__TIME__
根据当前区域设置script started compiling
的时间。
__TIMESTAMP__
日期&amp;根据当前区域设置的last modification to the script file
的时间。