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
这两个宏完全不同:
__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.
(来源)