下面的代码会做什么?为什么使用它?
#ifdef _WIN32
#include <direct.h>
#elif defined __linux__
#include <sys/stat.h>
#endif
C 中没有可移植的方式来操作文件系统目录。您需要一些提供包装接口来操作目录的库。(使用系统调用、操作系统中断例程等)
direct.h
是用于 Windows 的 C 编程语言的头文件。它包含用于操作文件系统目录的函数声明和所需的宏、结构等。在类似 Linux 的系统中,您可以使用sys/stat.h
相同的。
现在,如果您的代码可以针对任一操作系统进行编译,您可以在没有任何保护的情况下保留通用(可移植)代码,并将特定于 Windows 或特定于 linux 的代码保留在条件编译块中。
如果您没有有条件地包含这些文件,您可能会direct.h not found
在 Linux 中得到或类似的错误,而在 Windows 中可能会出现任何类似的错误。
__linux__
由针对 Linux 代码的编译器预先定义。
这个msdn 文档说:
_WIN32:为 Win32 和 Win64 的应用程序定义。始终定义。
这是一个条件语句,但用于编译时间。当程序被编译时,它会寻找它正在运行的平台,并为你的操作系统包含正确的头文件(这些库是为特定的操作系统实现的):
direct.h
用于窗户sys/stat.h
用于 GNU/Linux它就像一个经典if/else
语句一样工作:
if(platform == windows)
{
take_windows_lib();
}
else if (platform == linux)
{
take_linux_lib();
}
它确定要包含的库
因此,如果您在 Win32 平台上运行代码,它会使用 direct.h 库。
否则,如果检测到它在 Linux 平台上运行,则使用 sys/stat.h 库
图书馆的可用性因平台而异,可能在那里不可用。我倾向于尽可能地忽略那些库。IE。conio.h 仅适用于旧的 MS DOS 输入环境,不能在 Linux/GNU 环境中工作