宏__TIMESTAMP__卡住

时间:2015-04-27 10:05:29

标签: c++ timestamp

嗨,

我目前正在开发一个项目,该项目拥有自己的日志记录系统,多年前编写过,它使用{{1打印当前日期和时间。我注意到的是,有时候,这个宏会被卡住,并且会一遍又一遍地返回相同的值。例如,它是12:37并且宏保持返回11:16,即上一次运行的时间。

__TIMESTAMP__在每次通话之前是否都有一部分需要处理的内存?由于它已经使用多年而没有人注意到,这可能是我的电脑出了问题吗?

3 个答案:

答案 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);
}