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