gpt4 book ai didi

像 __TIME__ 这样的 C++ 预处理器指令有时不会改变/不会更新

转载 作者:太空宇宙 更新时间:2023-11-04 14:50:44 25 4
gpt4 key购买 nike

我使用的是 Visual Studio 2008 Express,并且我有以下日志记录代码:

fprintf(fp,"%s %s %s %s %d %s\n", pType, __DATE__, __TIME__, pFileName, lineNo, pMsg.c_str());
fflush(fp);

有时,如果我不删除日志而只是继续追加日志,__TIME__ 宏只会继续打印旧时间,而不是当前时间。

我正在使用以下代码打开文件

if(pfileName != NULL)
{
fp = fopen(pfileName, "a+");
if(fp != NULL)
fseek(fp, 0, SEEK_END);
}

最佳答案

问题是您没有进行重建。

默认情况下,Visual Studio 仅构建/编译自上次编译项目以来更改(已修改)的源文件。这是为了节省时间,这是一个非常有用的功能。如果你想确保源文件被重新编译,不管它们自上次构建以来是否被更改,你必须指示 VS 重建你的代码(或者通过歌舞进行清理,然后在您的项目上进行构建)。

重要的原因是 __TIME__ preprocessor macro 在预处理过程中(这发生在编译之前,至少为了我们这里的目的)用当前时间扩展。它会在您编译代码时第一次展开,并且永远不会更改,除非您修改源文件或重新编译(重建)它。

这可能不是您在日志记录功能中寻找的东西。您想要打印当前系统 时间,而不是编译 时间。您可以使用 time function要获得它——要使用它,请确保包含 <time.h>在源文件的顶部。或者,如果您已经包含 <windows.h> , 您可以调用 GetSystemTime function填写 SYSTEMTIME structure为您提供当前时间日期。

关于像 __TIME__ 这样的 C++ 预处理器指令有时不会改变/不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8658144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com