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

mar*_*ack 8 c macros c-preprocessor

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

换句话说,__TIME__在预处理期间确定一次然后固定,还是每次遇到它时重新评估?

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

chu*_*ica 5

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

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

__TIME__预处理翻译单元的翻译时间:形式的字符串文字,"hh:mm:ss"asctime函数生成的时间一样 .如果没有翻译时间,则应提供实施定义的有效时间.C11§6.10.8.11

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