可视C++预处理器指令(如__TIME__有时不会更改/未更新)
visual C++ preprocessor directives like __TIME__ sometimes don't change/aren't updated
我使用的是Visual Studio 2008 Express,我有这个日志代码:
fprintf(fp,"%s %s %s %s %d %sn", 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__
预处理器宏在预处理期间(这发生在编译之前,至少对于我们这里的目的而言)用当前时间展开。它在你编译代码的第一个得到扩展,并且永远不会被改变,除非你修改源文件或重新编译(重建)它。
这可能不是您在日志记录函数中寻找的。您希望打印当前系统时间,而不是编译时间。您可以使用time
函数来获得它——要使用它,请确保在源文件的顶部包含<time.h>
。或者,如果您已经包含了<windows.h>
,您可以调用GetSystemTime
函数来填充SYSTEMTIME
结构,该结构提供当前时间和日期。
__TIME__
is
当前源文件的最近编译时间。时间是hh:mm:ss形式的字符串字面值。
这个定义来自预定义宏。
要获取当前时间,可以使用time()或其他类似的函数。
相关文章:
- 从C++本机插件更新Vector3数组
- #定义c-预处理器常量..我做错了什么
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- 预处理器:插入结构名称中的前一个行号
- 如何在c++中实现处理器调度模拟器
- C/C++预处理器是否可以检测一些编译器选项
- cmake更新缓存的变量
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 在clang++预处理器中确定gcc工具链版本
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 不同/较旧的处理器运行c++代码的方式是否不同
- 用于交叉编译和CMake的预处理器宏的单元测试
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 可视C++预处理器指令(如__TIME__有时不会更改/未更新)