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