Win32 mkdir vs _mkdir

Win32 mkdir vs _mkdir

本文关键字:mkdir vs Win32      更新时间:2023-10-16

在本页中,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++程序,而该程序恰好以不兼容的方式使用相同的名称。

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

附加注意:我认为在链接更复杂的程序时,即使不包括实现定义的头文件,命名冲突也可能导致问题。然而,不清楚在这种情况下弃用这些函数是否真的有帮助,因为旧的名称仍然存在于库中。(然而,它们在不同的.lib文件中,也许这在某种程度上改善了问题。)

您可以在这里下载当前ISO c++标准2014年11月的工作草案。