Я хочу выполнить printf()
для отображения, когда последний исполняемый код компилируется. Предоставляет ли C/С++ макрос, который дает вам разрешение на временную метку во время компиляции?
Вставить временную метку в объектном коде во время компиляции с помощью С++
Ответ 1
Вы можете использовать __DATE__
и __TIME__
.
Ответ 2
16.8 Предопределенные имена макросов [cpp.predefined]
1 Реализация следующих макросов должна быть определена:__LINE__
Номер строки текущей строки источника (десятичная константа).__FILE__
Предполагаемое имя исходного файла (литерал символьной строки).__DATE__
Дата перевода исходного файла (символьный строковый литерал формы "Mmm dd yyyy", где имена месяцев те же, что и имена, сгенерированные функцией asctime, и первый символ dd является пробел, если значение меньше 10). Если дата перевода недоступна, предоставляется действительная дата, определенная реализацией.__TIME__
Время перевода исходного файла (символьный строковый литерал формы "hh: mm: ss", как во время, генерируемое функцией asctime). Если время перевода недоступно, предоставляется заданное время выполнения.__STDC__
Предоставлен ли__STDC__
, и если да, то каково его значение, определены реализацией.__cplusplus
Имя__cplusplus
определяется значением 199711L при компиляции С++ единица перевода.
Вы хотите __TIME__
и, возможно, __DATE__
.
Ответ 3
Используйте макросы __DATE__
и __TIME__
Ответ 4
Если вы используете препроцессор gcc, вы найдете то, что вы ищете в макросах __TIME__
и __DATE__
Цитата от процессора GNU C doc
__DATE__
Этот макрос расширяется до строковой константы, которая описывает дату выполнения препроцессора. Строковая константа содержит одиннадцать символов и выглядит как "12 февраля 1996". Если день месяца меньше 10, он заполняется пробелом слева.
__TIME__
Этот макрос расширяется до строковой константы, которая описывает время, в которое выполняется препроцессор. Строковая константа содержит восемь символов и выглядит как "23:59:01".
Ответ 5
Используйте script или создайте приложение, чтобы сгенерировать исходный файл С++, содержащий дату и время сборки. Добавьте этот файл в сборку. Другие части программы могут ссылаться на данные в этом файле.
Этот метод также полезен для встраивания номера версии в программу. Процесс сборки может управлять номером версии.
Ответ 6
Похоже, что компиляторы должны предоставить макрос __TIMESTAMP__
, который должен работать для ваших целей.
Ответ 7
Я использую это для отправки сообщения DbgView:
OutputDebugStringA(("ATTACHED VERSION: "+ string(__DATE__) + " " + string(__TIME__)).c_str());