Win32 mkdir与_mkdir

有害的

此页面上,Microsoft声明mkdir不赞成使用POSIX,而推荐使用“ ISO C ++ Conformant” _mkdir似乎同样适用于其他类似的POSIX函数。

就它们而言,它们是否意味着已被弃用,还是已经有一些标准机构(POSIX,ISO?)弃用了它?

从哪个方面来看,它更符合ISO C ++,并且更符合哪个ISO标准?

不幸的是,尽管我确实查看了C ++ 11的最新免费草案(N3337),但是我没有看到实际的ISO C ++标准,并且没有提及我可以看到的这些功能。

我提出这个问题的原因是,我经常调用这些POSIX函数,但是我宁愿不要针对过时的标准编写代码。

哈里·约翰斯顿

仅不赞成使用旧名称,不赞成使用函数,并且仅在Visual Studio中而不在POSIX中。

基本上,原因是mkdir在ISO C ++标准中未将其定义为运行时库函数,并且非标准运行时库函数应以下划线开头。因此,Microsoft在运行时库中的所有非标准函数名称中都添加了下划线。尽管有一些特定于Windows的功能,但大多数功能都类似于POSIX。

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章