我正在尝试实现此页面中给出的代码
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366062%28v=vs.85%29.aspx
我正在使用 mingw (gcc) 来编译它。 但是不能编译以下行。我已经包含了“time.h”。我进行了搜索,但找不到此“_localtime31_s”或其在 gcc 中的等效项。
error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
error = asctime_s(buffer, 32, &newtime);
这里的时间函数在哪里? 谢谢
最佳答案
函数 localtime_s
和 asctime_s
是 Microsoft 特定的扩展,由(某些版本的)MS 运行时库提供。这是由 MS 头文件提供的。由于这些是 MS 的版权并且不允许免费分发,mingw 提供了它自己的 header 版本 - 这些可能不包含这些扩展(当我在我的本地机器上使用 mingw 时他们肯定没有一段时间 - 我的主要这些天机器运行 Linux ...)。
请注意,将时间值转换为 time32_t *
可能不是一个好主意 - 如果您使用 time_t
编译代码,几乎肯定会咬到您不是 32 位值。
localtime_r
函数是一个半标准版本,可以用来代替 localtime_s
(您需要注意 32 位与 64 位时间值)。您当然也可以使用 localtime
(除了必须关闭 MS 烦人的“此功能不安全,请改用 ..._s
” - 我不 < em>真的 想将我对 strcpy 的 100 次使用转换为 strcpy_s,因为它已经在别处检查过,所以工作得很好)。
同样有asctime_r
它提供了一个可重入版本。
也许您也可以将这些函数的原型(prototype)添加到文件中的某处,我相信只要您是为 Windows 编译,就可以解决问题:
MS 函数文档链接:localtime_s
和 asctime_s
.
关于c++ - mingw中的时间函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17085603/