繁体   English   中英

Win32 mkdir vs _mkdir

[英]Win32 mkdir vs _mkdir

此页面上 ,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 ++标准中的运行时库函数,并且非标准运行时库函数应该以下划线开头。 因此,Microsoft已将下划线添加到运行时库中的所有非标准函数名称。 其中大多数是类似POSIX的功能,尽管有一些特定于Windows的功能。

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

在这种特殊情况下,只有当程序包含相关的实现定义的头文件时才会出现这种情况,因此我不相信ISO C ++实际上确实要求 Visual Studio弃用旧名称,但似乎Microsoft认为它确实或者使用保留标识符是最佳做法。 (或者应该不鼓励能够按原样编译POSIX源;请选择!)

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

您可以在此处下载当前ISO C ++标准的2014年11月工作草案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM