Встройте метку времени в объектный код во время компиляции с C++

Я хочу выполнить a printf() отображаться, когда в настоящее время выполняющий код был в последний раз скомпилирован. C/C++ обеспечивает макрос, который дает Вам, который решает к метке времени во время компиляции?

37
задан einpoklum - reinstate Monica 31 August 2016 в 10:26
поделиться

6 ответов

Вы можете использовать __ DATE __ и __ TIME __ .

31
ответ дан 27 November 2019 в 04:40
поделиться

Если вы используете препроцессор gcc, то вы найдете то, что ищете, в макросах __ TIME __ и __ DATE __

Quotes из документации препроцессора GNU C :

__ DATE __

Этот макрос заменяется строковой константой, описывающей дату, когда препроцессор запускается. Строковая константа содержит одиннадцать символов и выглядит как «12 февраля 1996 года». Если день месяца меньше 10, он заполняется пробелом слева.

...

__ TIME __

Этот макрос расширяется до строковой константы, описывающей время, в которое выполняется препроцессор. Строковая константа состоит из восьми символов и имеет вид «23:59:01».

4
ответ дан 27 November 2019 в 04:40
поделиться

16.8 Предопределенные имена макросов [cpp.predefined]
1 Следующие имена макросов должны быть определены реализацией:
__ LINE __ Номер строки текущей исходной строки (a десятичная константа).
__ FILE __ Предполагаемое имя исходного файла (литерал символьной строки).
__ DATE __ Дата перевода исходного файла (символьный строковый литерал в форме «Ммм дд гггг», где названия месяцев совпадают с названиями месяцев, сгенерированными функцией asctime, а первый символ of dd - это пробел, если значение меньше 10). Если дата перевода недоступна, предоставляется действительная дата, определяемая реализацией.
__ TIME __ Время перевода исходного файла (символьный строковый литерал в форме «чч: мм: сс», как во времени, созданном функцией asctime). Если время перевода недоступно, предоставляется действительное время, определяемое реализацией.
__ STDC __ Предопределено ли __ STDC __ , и если да, то каково его значение, определяется реализацией.
__ cplusplus Имя __ cplusplus определяется значением 199711L при компиляции единицы перевода C ++ .

Вы хотите __ TIME __ и, возможно, __ DATE __ .

25
ответ дан 27 November 2019 в 04:40
поделиться

Используйте макросы __ DATE __ и __ TIME __

6
ответ дан 27 November 2019 в 04:40
поделиться

Используйте сценарий или создайте приложение, чтобы сгенерировать исходный файл C ++, содержащий дату и время сборки. Добавьте этот файл в настройку сборки. Другие части программы могут ссылаться на данные в этом файле.

Этот метод также полезен для встраивания номера версии в программу. В процессе сборки можно контролировать номер версии.

2
ответ дан 27 November 2019 в 04:40
поделиться

Похоже на компиляторы ожидается, что предоставит макрос __ TIMESTAMP __ , который должен работать для ваших целей.

0
ответ дан 27 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: