为什么基于WIN32或linux有条件地包括direct.h或sys/stat.h?

为什么基于WIN32或linux有条件地包括direct.h或sys/stat.h?,c,ifdefine,C,Ifdefine,下面的代码将做什么?为什么要用它 #ifdef _WIN32 #include <direct.h> #elif defined __linux__ #include <sys/stat.h> #endif \ifdef\u WIN32 #包括 #elif已定义uu linux__ #包括 #恩迪夫 它确定要包含的库 因此,如果您在Win32平台上运行代码,它将使用direct.h库 否则,如果检测到它正在Linux平台上运行,则使用sys/stat

下面的代码将做什么?为什么要用它

  #ifdef _WIN32
  #include <direct.h>
  #elif defined __linux__
  #include <sys/stat.h>
  #endif
\ifdef\u WIN32
#包括
#elif已定义uu linux__
#包括
#恩迪夫

它确定要包含的库

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

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

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

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

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

现在,如果您的代码可以为任何一个操作系统编译,那么您可以在没有任何保护的情况下保留通用(可移植)代码,并将特定于windows或linux的代码保留在块中

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

\uuuu linux\uuuu
是针对linux代码的编译器预定义的

msdn文件说:

_WIN32:为WIN32和WIN32 64的应用程序定义。始终定义


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

  • direct.h
    适用于windows
  • sys/stat.h
    用于GNU/Linux
它的工作原理与经典的
if/else
语句类似:

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

对于上面的“标准”,我会三思而后行;)事实上,它决定了要包含哪个头文件,这是链接到库的一个完全独立的步骤。我真的不明白为什么所有的否决票?对我来说,这似乎是一个完全正确的问题。