为什么有条件地包含direct.h或sys / stat.h基于_WIN32或__linux__?

时间:2014-08-13 07:29:18

标签: c ifdefine

以下代码的作用是什么?为什么使用它?

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

3 个答案:

答案 0 :(得分:9)

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

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

现在,如果您的代码可能是为任何一个操作系统编译的,那么您可以保留公共(可移植)代码而不需要任何保护,并在conditional compilation块中保留特定于Windows或Linux的代码。

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

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

This msdn文件说:

  

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

答案 1 :(得分:3)

这是条件语句,但编译时间。 编译程序时,它会查找正在运行的平台,并包含适用于您的操作系统的标头(这些库是针对特定操作系统实现的):

  • direct.h for windows
  • sys/stat.h用于GNU / Linux

它就像经典的if/else语句一样:

if(platform == windows)
{
    take_windows_lib();
}
else if (platform == linux)
{
    take_linux_lib();
}

答案 2 :(得分:0)

确定要包含的库

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

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

图书馆的可用性因平台而异,可能在那里不可用。 我倾向于在可能的情况下忽略这些库。即。 conio.h仅适用于旧的MS DOS输入环境,不适用于Linux / GNU环境