繁体   English   中英

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

[英]Why include direct.h or sys/stat.h conditionally based on _WIN32 or __linux__?

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

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

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

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

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

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

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

这个 msdn文件说:

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

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

  • direct.h for windows
  • GNU / Linux的sys/stat.h

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

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

它确定要包含的库

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM