【发布时间】:2012-05-08 13:27:19
【问题描述】:
我在将 Linux 工具移植到 Windows 时遇到问题。我在 Windows 系统上使用 MinGW。我有一个处理所有输入/输出的类,其中是这一行:
mkdir(strPath.c_str(), 0777); // works on Linux but not on Windows and when it is changed to
_mkdir(strPath.c_str()); // it works on Windows but not on Linux
任何想法我可以做什么,以便它在两个系统上都适用?
【问题讨论】:
-
您可以确定您在哪个系统上并使用正确的系统。类似
#ifdef LINUX ... #else ... #endif -
条件编译?
-
Aside:你的意思是使用
0777,而不是777。它们是非常不同的数字。 -
为什么一个标准的 c 函数,为了便于移植,需要一个条件宏 if?拥有标准库的全部意义不是不需要使用宏吗?标准库过时了吗?为什么我们没有一个闪亮的新标准库来取代 stdio 和 iostream 并以可移植的方式满足常见用例?
-
@Dmitry:
mkdir不是标准的 C 函数。这是一个标准的 Posix 函数。 Posix 标准将函数注入 C 运行时,从 C++ 标准的角度来看,这在技术上使标头非标准。许多 unix 托管的编译器及其相应的库选择遵守 Posix,但 Microsoft 选择遵守 C++ 标准。因此,对于它们提供的 Posix 函数的子集,Microsoft 在名称前加上下划线,使它们“为编译器和库实现者保留”,正如 C++ 标准所允许的那样。