Win32 mkdir vs _mkdir
Win32 mkdir vs _mkdir
在本页中,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月的工作草案。
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 完美前进使用 std::forward vs RefRefCast
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- consteval wrapper vs. source_location
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- Win32 mkdir vs _mkdir