在
this page,Microsoft声明POSIX mkdir不赞成使用“ISO C Conformant”_mkdir.这似乎适用于其他类似的POSIX功能.
他们是否意味着在他们担心的情况下被弃用,或者是否有一些标准组织(POSIX,ISO?)已弃用它?
它在哪方面更符合ISO C标准,而ISO标准更符合标准?
不幸的是,我没有访问实际的ISO C标准,虽然我确实查看了最后一个免费提供的C 11(N3337)草案,但它没有提到我能看到的这些功能.
解决方法
不推荐使用旧名称,而不是函数,仅在Visual Studio中,而不在POSIX中.
基本上,原因是mkdir没有被定义为ISO C标准中的运行时库函数,并且非标准运行时库函数应该以下划线开头.因此,Microsoft已将下划线添加到运行时库中的所有非标准函数名称.其中大多数是类似POSIX的功能,尽管有一些特定于Windows的功能.
定义保留供实现使用的标识符的标准部分是2.10,第3段.据我所知,标准没有明确声明实现不能使用其他标识符,但可能是隐含在事实上,这样的实现将无法构建合法的C程序,恰好以不兼容的方式使用相同的名称.
在这种特殊情况下,只有当程序包含相关的实现定义的头文件时才会出现这种情况,因此我不相信ISO C确实要求Visual Studio弃用旧名称,但似乎Microsoft认为它确实或者使用保留标识符是最佳做法. (或者应该不鼓励能够按原样编译POSIX源;请选择!)
附加说明:我认为命名冲突也可能在链接期间导致更复杂的程序出现问题,即使未包含实现定义的头文件也是如此.但是,在这种情况下,弃用函数实际上有帮助并不清楚,因为旧的名称仍然存在于库中. (但是,它们位于不同的.lib文件中,并且可能会以某种方式改善问题.)
You can download the November 2014 working draft of the current ISO C++ standard here.