c ++ PRINT macro linux - добавить дату и время - PullRequest
0 голосов
/ 08 февраля 2011

в моем приложении c ++ linux У меня есть этот макрос:

#define PRINT(format,arg...) printf(format,##arg)

Я хочу добавить дату и время в начале строки, которая приходит в PRINT.(это журнал, так что я хочу его во время выполнения, с переменными) как изменить этот макрос, чтобы сделать это?

спасибо

Ответы [ 4 ]

1 голос
/ 08 февраля 2011

Если вы хотите локальную дату выполнения и можете использовать boost.date_time

#define DATE_TODAY to_simple_string(day_clock::local_day())
#define PRINT(format,arg...) printf( (DATE_TODAY + ": " + format).c_str(), ##arg)

Вы также можете использовать day_clock::universal_day(), если хотите использовать время UTC.

1 голос
/ 08 февраля 2011

Вы хотите добавить время компиляции или время выполнения к строке?Если первое:

#define PRINT(format,arg...) printf(__DATE__ ":" __TIME__ "  " format,##arg)

будет работать большую часть времени.

Обратите внимание, что это будет работать, только если при вызовах PRINT используется только строковый литерал для строки формата.(т. е. PRINT ("foo") будет работать, но PRINT (x), где x - переменная, не будет).

Если вы хотите, чтобы дата и время времени выполнения просто добавляли "% s" в формата затем добавьте вызов функции, которая возвращает аргументы перед аргументами.

0 голосов
/ 08 февраля 2011

Предполагая, что вам нужна дата времени компиляции и что у вашего компилятора есть макрос __DATE__, который возвращает дату

#define PRINT(format,arg...) printf(__DATE__ ": " format,##arg)

Если вы хотите дату выполнения, то вы можете сделать что-то подобное:

std::string format_current_time()
{
   // format the time as you like and return it as an std::string
}

#define PRINT(format,arg...) printf("%s: " format, format_current_time.c_str(), ##arg)
0 голосов
/ 08 февраля 2011

Если вам нужно текущее время и дата, вам нужно реализовать обычную функцию, чтобы делать то, что вы просите, так как макрос C не может вернуть искомые данные.

Помните, что макрос Cзаменяется препроцессором Си во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...