[英]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 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.