gpt4 book ai didi

c++ - Win32 mkdir 与 _mkdir

转载 作者:可可西里 更新时间:2023-11-01 18:36:46 27 4
gpt4 key购买 nike

关于 this page , Microsoft 声明 POSIX mkdir 已弃用,取而代之的是“符合 ISO C++ 规范”的 _mkdir。这似乎也适用于其他类似的 POSIX 函数。

就他们而言,它们的意思是已弃用,还是有一些标准机构(POSIX、ISO?)弃用了它?

它在哪些方面更符合 ISO C++,它更符合哪个 ISO 标准?

不幸的是,我无法访问实际的 ISO C++ 标准,尽管我确实查看了 C++11 (N3337) 的最新免费草案,但它没有提到我能看到的这些函数。

我提出这个问题的原因是我经常调用这些 POSIX 函数,但是我不想根据已弃用的标准编写代码。

最佳答案

只有旧名称被弃用,函数没有被弃用,并且仅在 Visual Studio 中被弃用,在 POSIX 中没有被弃用。

基本上,原因是 mkdir 在 ISO C++ 标准中没有被定义为运行时库函数,非标准的运行时库函数应该以下划线开头。相应地,微软为运行时库中的所有非标准函数名添加了下划线。其中大部分是类似 POSIX 的函数,但也有一些特定于 Windows 的函数。

标准中定义保留供实现使用的标识符的部分是 2.10,第 3 段。据我所知,该标准没有明确声明实现不能使用其他标识符,但据推测,这样的实现将无法构建合法的 C++ 程序,而该程序恰好以不兼容的方式使用相同的名称。

在这种特殊情况下,只有当程序包含相关的实现定义的 header 时,这才是正确的,所以我不相信 ISO C++ 实际上确实要求 Visual Studio 弃用旧名称,但微软似乎要么相信它做到了,要么认为使用保留标识符是最佳做法。 (或者不鼓励按原样编译 POSIX 源代码;随您选择!)

附加说明:我认为在链接更复杂的程序时命名冲突也可能导致问题,即使未包含实现定义的 header 也是如此。但是,尚不清楚在这种情况下弃用这些函数是否真的有帮助,因为库中仍然存在旧名称。 (但是,它们位于不同的 .lib 文件中,也许这会以某种方式改善问题。)

You can download the November 2014 working draft of the current ISO C++ standard here.

关于c++ - Win32 mkdir 与 _mkdir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33326732/

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