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

Bos*_*nia 5 c ifdefine

以下代码将做什么?为什么用它?

  #ifdef _WIN32
  #include <direct.h>
  #elif defined __linux__
  #include <sys/stat.h>
  #endif
Run Code Online (Sandbox Code Playgroud)

Moh*_*ain 9

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

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

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

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

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

这个 msdn文件说:

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