9

下面的代码会做什么?为什么使用它?

  #ifdef _WIN32
  #include <direct.h>
  #elif defined __linux__
  #include <sys/stat.h>
  #endif
4

3 回答 3

12

C 中没有可移植的方式来操作文件系统目录。您需要一些提供包装接口来操作目录的库。(使用系统调用、操作系统中断例程等)

direct.h是用于 Windows 的 C 编程语言的头文件。它包含用于操作文件系统目录的函数声明和所需的宏、结构等。在类似 Linux 的系统中,您可以使用sys/stat.h相同的。

现在,如果您的代码可以针对任一操作系统进行编译,您可以在没有任何保护的情况下保留通用(可移植)代码,并将特定于 Windows 或特定于 linux 的代码保留在条件编译块中。

如果您没有有条件地包含这些文件,您可能会direct.h not found在 Linux 中得到或类似的错误,而在 Windows 中可能会出现任何类似的错误。

__linux__由针对 Linux 代码的编译器预先定义。

这个msdn 文档说:

_WIN32:为 Win32 和 Win64 的应用程序定义。始终定义。

于 2014-08-13T07:41:57.180 回答
3

这是一个条件语句,但用于编译时间。当程序被编译时,它会寻找它正在运行的平台,并为你的操作系统包含正确的头文件(这些库是为特定的操作系统实现的):

  • direct.h用于窗户
  • sys/stat.h用于 GNU/Linux

它就像一个经典if/else语句一样工作:

if(platform == windows)
{
    take_windows_lib();
}
else if (platform == linux)
{
    take_linux_lib();
}
于 2014-08-13T07:45:46.620 回答
0

它确定要包含的库

因此,如果您在 Win32 平台上运行代码,它会使用 direct.h 库。

否则,如果检测到它在 Linux 平台上运行,则使用 sys/stat.h 库

图书馆的可用性因平台而异,可能在那里不可用。我倾向于尽可能地忽略那些库。IE。conio.h 仅适用于旧的 MS DOS 输入环境,不能在 Linux/GNU 环境中工作

于 2014-08-13T07:32:05.770 回答