Я хочу выполнить printf()
для отображения, когда текущий исполняемый код был в последний раз скомпилирован. Предоставляет ли C/C++ макрос, который дает вам временную метку во время компиляции?
Внедрение временной метки в объектный код во время компиляции с помощью C++
Ответы (7)
Вы можете использовать __DATE__
и __TIME__
.
__DATE__
и __TIME__
, при каждой компиляции.
- person jschmier; 27.03.2010
touch
файл, содержащий макрос, перед компиляцией, чтобы принудительно его пересобрать (в идеале, файл, содержащий макросы, должен быть таким, чтобы от него зависели лишь немногие другие файлы, если таковые имеются).
- person Renan Gemignani; 06.12.2013
16.8 Предопределенные имена макросов [cpp.predefined]
1 Следующие имена макросов должны быть определены реализацией:__LINE__
Номер строки текущей исходной строки (десятичная константа).__FILE__
Предполагаемое имя исходного файла (литерал строки символов).__DATE__
Дата перевода исходного файла (литерал строки символов в форме "Ммм дд гггг", где названия месяцев совпадают с именами, сгенерированными asctime, а первым символом dd является пробел, если значение меньше 10). Если дата перевода недоступна, предоставляется действительная дата, определяемая реализацией.__TIME__
Время перевода исходного файла (литерал символьной строки в форме «чч:мм:сс», как и в сгенерированном времени функцией asctime). Если время перевода недоступно, предоставляется действительное время, определенное реализацией.__STDC__
Предопределено ли__STDC__
, и если да, то каково его значение, определяется реализацией.__cplusplus
Имя__cplusplus
определяется как значение 199711L при компиляции единицы трансляции C++.
Вы хотите __TIME__
и, возможно, __DATE__
.
__STDC__
— это целочисленная константа 1, предназначенная для обозначения соответствующей реализации, а __cplusplus
никогда не определяется. Полный список в C11 находится в §6.10.8.1.
- person GManNickG; 31.08.2016
Используйте макросы __DATE__
и __TIME__
Если вы используете препроцессор gcc, вы найдете то, что ищете, в макросах __TIME__
и __DATE__
.
Цитаты из препроцессора GNU C документация:
__ДАТА__
Этот макрос преобразуется в строковую константу, описывающую дату запуска препроцессора. Строковая константа содержит одиннадцать символов и имеет вид «12 февраля 1996 года». Если число месяца меньше 10, оно дополняется пробелом слева.
...
__ВРЕМЯ__
Этот макрос преобразуется в строковую константу, описывающую время запуска препроцессора. Строковая константа содержит восемь символов и имеет вид «23:59:01».
Используйте сценарий или создайте приложение для создания исходного файла C++, содержащего дату и время сборки. Добавьте этот файл в настройки сборки. Другие части программы могут ссылаться на данные в этом файле.
Этот метод также полезен для внедрения номера версии в программу. Процесс сборки может управлять номером версии.
Похоже, компиляторы должны предоставить макрос __TIMESTAMP__
, который должен работать для ваших целей.
__TIMESTAMP__
указывает дату и время последнего редактирования ( !) сделан в файл (не время компиляции).
- person sthlm58; 10.10.2013
Я использую это для отправки сообщения в DbgView:
OutputDebugStringA(("ATTACHED VERSION: "+ string(__DATE__) + " " + string(__TIME__)).c_str());
__DATE__
__TIME__
. тоже работает.
- person Alexander; 23.03.2017