发布于 2015-10-27 01:55:54
只有旧名称被弃用,而不是函数,而仅在Visual中,而不是在POSIX中。
基本上,原因是mkdir没有被定义为C++标准中的运行时库函数,而非标准的运行库函数应该以下划线开头。因此,Microsoft将下划线添加到运行时库中的所有非标准函数名中。其中大部分是类似POSIX的函数,尽管有一些特定于Windows的函数。
标准中定义供实现使用的标识符的部分是2.10,第3段。据我所知,该标准没有明确规定该实现不能使用其他标识符,但它可能隐含在这样一个事实中,即这样的实现将无法构建一个合法的C++程序,而该程序碰巧以一种不兼容的方式使用同名。
在这种特殊情况下,只有当程序包含相关的实现定义的标头时,这才是正确的,所以我不确信C++确实确实要求Visual取消旧名称,但是看起来微软要么认为是这样,要么是使用保留标识符是最佳实践。(或者说,如果能够按原样编译POSIX源代码,就应该阻止这种情况;选择吧!)
附加注意:我假设命名冲突也有可能在链接更复杂的程序时造成问题,即使不包括实现定义的标头。但是,在这种情况下,不推荐函数是否真的有帮助还不清楚,因为旧的名称仍然存在于库中。(然而,它们在一个不同的.lib文件中,也许这在某种程度上改善了问题。)
https://stackoverflow.com/questions/33326732
复制相似问题