嗨,
我目前正在开发一个项目,该项目拥有自己的日志记录系统,多年前编写过,它使用{{1打印当前日期和时间。我注意到的是,有时候,这个宏会被卡住,并且会一遍又一遍地返回相同的值。例如,它是12:37并且宏保持返回11:16,即上一次运行的时间。
__TIMESTAMP__
在每次通话之前是否都有一部分需要处理的内存?由于它已经使用多年而没有人注意到,这可能是我的电脑出了问题吗?
答案 0 :(得分:3)
您无法使用__TIMESTAMP__
打印当前日期和时间,因为它是预处理程序编译指示。它将始终显示项目编译时间,而不是当前时间。使用time(1)获取当前时间。
答案 1 :(得分:1)
根据@ SebastianPhilipp的评论,__TIMESTAMP__
表示编译可执行文件的时间。作为替代方案,我建议您查看ctime()
和asctime()
答案 2 :(得分:1)
TIMESTAMP 是一个预处理器宏,它以Ddd Mmm Date hh :: mm :: ss yyyy的形式扩展到当前时间(在编译时),您可以获得更多信息here
以下是日志
的示例static char* time_to_string(time_t t, char* buf, size_t bufsize)
{
struct tm tm;
strftime(buf, bufsize, "%Y-%m-%d %H:%M:%S", localtime_r(&t, &tm));
return buf;
}
extern "C" void log_printf(FILE* stream, const char* format, ...)
{
char t[32];
flockfile(stream);
fprintf(stream, "[%s] ", time_to_string(time(NULL), t, sizeof(t)));
va_list va;
va_start(va, format);
vfprintf(stream, format, va);
va_end(va);
funlockfile(stream);
}