哪个宏更精确?__TIME__或__TIMESTAMP__?

Mat*_*ero 0 c++ macros visual-c++ c-preprocessor

我有以下小程序:

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

产生以下输出:

时间和时间戳输出

正如你所看到的,__TIME__有一个很大的不同__TIMESTAMP__,它提前4秒.

为什么会这样?怎么会两次出现这样的差异?

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

Lig*_*ica 12

这两个宏完全不同:


GCC

__TIME__

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

(来源)

__TIMESTAMP__

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

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

(来源)


视觉工作室

__TIME__:当前源文件的最新编译时间.时间是hh:mm:ss形式的字符串文字.
__TIMESTAMP__:当前源文件的最后一次修改的日期和时间,Ddd Mmm Date hh:mm:ss yyyy的形式表示为字符串文字,其中Ddd是星期的缩写日,Date是从1到1的整数31.

(来源)

  • 哦,这很有意思!一定是它! (2认同)