__TIME__预处理器宏是否保证在文件中保持不变?

时间:2016-04-27 22:22:17

标签: c macros c-preprocessor

出于好奇,我想知道标准__TIME__预处理器宏给出的值是否可以在单个翻译单元中更改?

换句话说,__TIME__在预处理过程中确定一次然后是固定的,还是每次遇到它时都会重新评估?

如果C标准未指定,主要实现(gnu,clang,intel,msvc)中是否存在事实上的标准行为?

1 个答案:

答案 0 :(得分:5)

C没有严格指定“翻译时间”在整个预处理/编译过程中是不变的。

我的经验是不变的。但由于它只是第二个,因此给定的编译需要越过第二个边界才能有所不同。

  

__TIME__预处理翻译单元的翻译时间:"hh:mm:ss"形式的字符串文字,与   asctime功能。如果没有翻译时间,   应提供实施定义的有效时间。 C11§6.10.8.11

     

__DATE____TIME__的定义分别为日期和时间   翻译时间不可用(6.10.8.1)。 (资料性附录)C11§J.3.111