簡體   English   中英

為什么有條件地包含direct.h或sys / stat.h基於_WIN32或__linux__?

[英]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
  • GNU / Linux的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM