0

我正在尝试实现此页面中给出的代码

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366062%28v=vs.85%29.aspx

我正在使用 mingw (gcc) 来编译它。但以下行无法编译。我已经包括了'time.h'。我搜索但无法在 gcc 中找到此“_localtime31_s”或其等效项。

error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
error = asctime_s(buffer, 32, &newtime);

这里的时间函数在哪里?谢谢

4

2 回答 2

1

MinGW-w64提供了启用安全 CRT 功能的选项。请注意,Windows XP 存在兼容性问题,其中 msvcrt.dll 不包含这些功能,您的应用程序将无法在该环境中运行。

这些在C11 附录 K中标准化,这是可选的,在符合 C11 的系统中可能会丢失。

于 2013-06-13T14:23:00.407 回答
1

函数localtime_sasctime_s是 Microsoft 特定的扩展,由 MS 运行时库(某些版本)提供。这是由 MS 头文件提供的。由于这些是版权 MS 并且不允许免费分发,因此 mingw 提供了自己的标头版本 - 这些可能不包含这些扩展名(当我在本地机器上使用 mingw 时它们肯定没有一段时间 - 我的主要这些天机器运行Linux ...)。

请注意,将时间值转换为可能是一个坏主意 - 如果您使用不是 32 位值的值time32_t *编译代码,它几乎肯定会咬到您。time_t

localtime_r函数是一个半标准版本,可以用来代替localtime_s(您需要注意 32 与 64 位时间值)。您当然也可以使用localtime(除了必须关闭 MS 烦人的“此功能不安全,请..._s改用” - 我真的不想将我对 strcpy 的 100 次使用转换为运行良好的 strcpy_s,因为它已经在别处检查)。

同样,asctime_r它提供了可重入版本。

您也许还可以将这些函数的原型添加到您的文件中的某个地方,我相信只要您为 Windows 编译,就可以解决问题:

链接到 MS 功能文档:localtime_sasctime_s.

于 2013-06-13T13:31:26.673 回答