【发布时间】:2014-10-06 11:24:12
【问题描述】:
下面的代码会做什么?为什么使用它?
#ifdef _WIN32
#include <direct.h>
#elif defined __linux__
#include <sys/stat.h>
#endif
【问题讨论】:
-
我真的不明白为什么所有的反对票?对我来说,这似乎是一个非常有效的问题。
下面的代码会做什么?为什么使用它?
#ifdef _WIN32
#include <direct.h>
#elif defined __linux__
#include <sys/stat.h>
#endif
【问题讨论】:
它决定要包含的库
因此,如果您在 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 的代码保留在 conditional compilation 块中。
如果您没有有条件地包含这些文件,您可能会在 Linux 中收到 direct.h not found 或类似错误,在 Windows 中可能会收到任何类似错误。
__linux__ 由针对 Linux 代码的编译器预定义。
Thismsdn 文档说:
_WIN32:为 Win32 和 Win64 应用程序定义。始终定义。
【讨论】:
这是一个条件语句,但用于编译时间。 当程序被编译时,它会寻找它正在运行的平台,并为您的操作系统包含正确的头文件(这些库是为特定的操作系统实现的):
direct.h 用于 Windows sys/stat.h 用于 GNU/Linux它就像经典的if/else 语句一样工作:
if(platform == windows)
{
take_windows_lib();
}
else if (platform == linux)
{
take_linux_lib();
}
【讨论】: