Вставить метку времени в объектный код во время компиляции с C ++ - PullRequest
36 голосов
/ 27 марта 2010

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

Ответы [ 7 ]

29 голосов
/ 27 марта 2010

Вы можете использовать __DATE__ и __TIME__.

23 голосов
/ 27 марта 2010

16.8 Предопределенные имена макросов [cpp.predefined]
1 Следующие имена макросов должны быть определены реализацией:
__LINE__ Номер строки текущей строки источника (десятичная константа).
__FILE__ Предполагаемое имя исходного файла (буквенная строка символов).
__DATE__ Дата перевода исходного файла (символьный строковый литерал в форме "Mmm dd yyyy", где названия месяцев совпадают с названиями, сгенерированными функцией asctime, а первый символ dd является пробел, если значение меньше 10). Если дата перевода недоступна, указывается действительная дата, определенная реализацией.
__TIME__ Время трансляции исходного файла (символьный строковый литерал в форме "чч: мм: сс", как во времени, сгенерированном функцией asctime). Если время перевода недоступно, указывается допустимое время, определенное реализацией.
__STDC__ Является ли __STDC__ предопределенным и, если да, то каково его значение, определяются реализацией.
__cplusplus Имя __cplusplus определяется значением 199711L при компиляции C ++ переводческий блок.

Вы хотите __TIME__ и, возможно, __DATE__.

6 голосов
/ 27 марта 2010

Используйте макросы __DATE__ и __TIME__

4 голосов
/ 27 марта 2010

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

Цитаты из препроцессора GNU C Документация :

__ ДАТА __

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

...

__ ВРЕМЯ __

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

2 голосов
/ 27 марта 2010

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

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

0 голосов
/ 20 декабря 2016

Я использую это для отправки сообщения в DbgView:

    OutputDebugStringA(("ATTACHED VERSION: "+ string(__DATE__) + " " + string(__TIME__)).c_str());
0 голосов
/ 27 марта 2010

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

...