Win32 mkdir 与 _mkdir
Win32 mkdir vs _mkdir
在 this page 上,Microsoft 声明 POSIX mkdir
已弃用,取而代之的是 "ISO C++ Conformant" _mkdir
。这似乎也适用于其他类似的 POSIX 函数。
就他们而言,它们的意思是已弃用,还是有一些标准机构(POSIX、ISO?)弃用了它?
它在哪些方面更符合 ISO C++,它更符合哪个 ISO 标准?
不幸的是,我无法访问实际的 ISO C++ 标准,尽管我确实查看了 C++11 (N3337) 的最新免费草案,但它没有提到我可以看到的这些功能。
我问的原因是我经常调用这些 POSIX 函数,但是我不想根据已弃用的标准编写代码。
只有旧名称被弃用,函数没有被弃用,并且仅在 Visual Studio 中,而不在 POSIX 中。
基本上,原因是mkdir
在ISO C++标准中没有定义为运行时库函数,而non-standard运行时库函数应该以下划线开头。因此,Microsoft 已将下划线添加到运行时库中的所有 non-standard 函数名称中。其中大部分是 POSIX-like 函数,但也有一些 Windows-specific 函数。
标准中定义保留供实施使用的标识符的部分是 2.10,第 3 段。据我所知,该标准没有明确说明该实现不能使用其他标识符,但据推测,这样的实现将无法构建合法的 C++ 程序,而该程序恰好以不兼容的方式使用相同的名称。
在这种特殊情况下,只有当程序包含相关的 implementation-defined headers 时,这才是正确的,所以我不相信 ISO C++ 实际上 require Visual Studio 弃用旧名称,但似乎 Microsoft 要么认为它这样做了,要么认为使用保留标识符是最佳做法。 (或者不鼓励能够编译 POSIX 源代码 as-is;你自己选吧!)
附加说明:我认为在链接更复杂的程序时,命名冲突也可能导致问题,即使 implementation-defined headers 不包括在内。但是,尚不清楚在这种情况下弃用这些函数是否真的有帮助,因为库中仍然存在旧名称。 (但是,它们位于不同的 .lib 文件中,也许这会以某种方式改善问题。)
You can download the November 2014 working draft of the current ISO C++ standard here.
在 this page 上,Microsoft 声明 POSIX mkdir
已弃用,取而代之的是 "ISO C++ Conformant" _mkdir
。这似乎也适用于其他类似的 POSIX 函数。
就他们而言,它们的意思是已弃用,还是有一些标准机构(POSIX、ISO?)弃用了它?
它在哪些方面更符合 ISO C++,它更符合哪个 ISO 标准?
不幸的是,我无法访问实际的 ISO C++ 标准,尽管我确实查看了 C++11 (N3337) 的最新免费草案,但它没有提到我可以看到的这些功能。
我问的原因是我经常调用这些 POSIX 函数,但是我不想根据已弃用的标准编写代码。
只有旧名称被弃用,函数没有被弃用,并且仅在 Visual Studio 中,而不在 POSIX 中。
基本上,原因是mkdir
在ISO C++标准中没有定义为运行时库函数,而non-standard运行时库函数应该以下划线开头。因此,Microsoft 已将下划线添加到运行时库中的所有 non-standard 函数名称中。其中大部分是 POSIX-like 函数,但也有一些 Windows-specific 函数。
标准中定义保留供实施使用的标识符的部分是 2.10,第 3 段。据我所知,该标准没有明确说明该实现不能使用其他标识符,但据推测,这样的实现将无法构建合法的 C++ 程序,而该程序恰好以不兼容的方式使用相同的名称。
在这种特殊情况下,只有当程序包含相关的 implementation-defined headers 时,这才是正确的,所以我不相信 ISO C++ 实际上 require Visual Studio 弃用旧名称,但似乎 Microsoft 要么认为它这样做了,要么认为使用保留标识符是最佳做法。 (或者不鼓励能够编译 POSIX 源代码 as-is;你自己选吧!)
附加说明:我认为在链接更复杂的程序时,命名冲突也可能导致问题,即使 implementation-defined headers 不包括在内。但是,尚不清楚在这种情况下弃用这些函数是否真的有帮助,因为库中仍然存在旧名称。 (但是,它们位于不同的 .lib 文件中,也许这会以某种方式改善问题。)
You can download the November 2014 working draft of the current ISO C++ standard here.