Просто из любопытства. Мне интересно, может ли значение, заданное стандартным макросом препроцессора __TIME__
, изменить в пределах одной единицы перевода?Является ли макрос препроцессора __TIME__ гарантированно постоянным в файле?
Другими словами, __TIME__
определяется один раз во время предварительной обработки, а затем фиксируется или пересматривается каждый раз, когда он встречается?
Если это не указано стандартом C, существует ли стандартное поведение де-факто среди основных реализаций (gnu, clang, intel, msvc)?
См. 6.10.8.1p1 Скорее всего, это означает, что при предварительной обработке _starts_. Все остальное было бы бесполезно. – Olaf
Я думаю, что текущая версия GNU CPP устанавливает значения для '__TIME__' и '__DATE__' в то же время, в то время, когда макрос сначала расширяется. Я не уверен на 100%, но объем определенного набора значений для этих макросов представляется выделенным, в то время как параметры командной строки анализируются, поэтому по существу один раз за вызов. Источник GCC, как известно, запутан. – NovaDenizen
@NovaDenizen необходимость одновременности '__DATE__' и' __TIME__' - отличная точка! Представьте, если бы эти 2 не были установлены в одно и то же мгновение. Else с '__TIME__'' 00: 00: 00' '__DATE__' может быть вчера или сегодня. Единственная нормальная функциональность - это одноразовая настройка обоих значений. – chux