Если __TIME__
дает разные результаты для разных единиц перевода, то он не должен использоваться в контексте, где одинаковый результат требуется для единиц перевода. Это означает, например, инициализация объекта (например, члена класса) до __TIME__
, где этот инициализатор является частью заголовка, который входит в множество единиц перевода, будет проблематичным.
__DATE__
имеет меньше шансов дать разные результаты для разных единиц перевода, если вы начинаете новую сборку, но инкрементные сборки, которые только перекомпилируют измененные файлы, также делают ее вероятной проблемой.
assert
макрос, который расширяется по-разному в зависимости от того, как NDEBUG
был определен, когда его заголовок был включен, так как весь проект должен договориться о том, следует ли определить NDEBUG
, или функции, определенные в заголовках следует избегать использования assert
.