哪个宏更精确? __TIME__或__TIMESTAMP__?

时间:2014-12-29 14:55:37

标签: c++ visual-c++ macros c-preprocessor

我有以下小程序:

#include <iostream>
int main() {
   std::cout << "Time: " << __TIME__ << std::endl;
   std::cout << "Timestamp: " << __TIMESTAMP__ << std::endl;
   return 0;
}

产生以下输出:

Time and Timestamp output

正如您所看到的,__TIME____TIMESTAMP__有很大差异,提前4秒

为什么会这样?两次之间怎么会有这样的差异?

即使程序的构建时间不到4秒,所以这种差异来自哪里?

2 个答案:

答案 0 :(得分:12)

这两个宏完全不同:


GCC

  

__TIME__

     

此宏扩展为一个字符串常量,用于描述预处理器运行的时间。字符串常量包含八个字符,看起来像“23:59:01”。   如果GCC无法确定当前时间,它将发出警告消息(每次编译一次),__TIME__将扩展为“??:??:??”。

source

  

__TIMESTAMP__

     

此宏扩展为字符串常量,该常量描述上次修改当前源文件的日期和时间。字符串常量包含星期,月,月中的缩写日期,以hh:mm:ss形式,年份的时间,看起来像“Sun Sep 16 01:03:52 1973”。如果该月的日期小于10,则在左侧填充空格。

     

如果GCC无法确定当前日期,它将发出警告消息(每次编译一次),__TIMESTAMP__将扩展为“??? ??? ?? ??:??:?? ????”。

source


Visual Studio

  

__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的时间。