簡體   English   中英

我怎么知道我在做什么操作系統?

[英]How can I know what OS I'm working in?

我需要一個可以在Linux和Windows中清除屏幕的功能。 為此,我想知道是否有一些說明可以告訴我我正在使用的操作系統。 我搜索了解決方案,我找到了以下代碼:

void clear_screen()
{
   #ifdef WINDOWS

    std::system ( "CLS" );

    #else

    // Assume POSIX

    std::system("clear");

    #endif
}

這個功能有兩個問題:

  • 我不明白。

    - > #ifdef WINDOWS ,WINDOWS定義在哪里?

  • 此代碼適用於Linux,但在Windows中不起作用。

注意 :

  • 我正在使用Windows XP。

  • 我不想要任何非標准功能......比如“詛咒”

您正在尋找

// Windows, all variants (including 64-bit and ARM)
#ifdef _WIN32

要么

#ifdef __unix__

這些是由編譯器定義的,不存儲在頭文件中。 因此,您不需要首先#include一個文件,這些#ifdef將始終給出正確的結果(除非您搞亂編譯器)

諸如_WIN32__gnu_linux____linux__類的宏由相關編譯器定義。 您可以在此處找到預定義編譯器宏的完整列表。

_WIN32是為Windows的32位和64位環境定義的。

WINDOWS由您的編譯器定義,因此該定義可以依賴於編譯器。 根據您的操作系統編譯特定代碼非常有用。

有各種依賴於編譯器的宏。 不幸的是,它們並不是特別有用,因為它們不是標准化的,並且特定操作系統的C編譯器不一定#define它們。 我還懷疑它們實際上違反了C標准C11 7.1.3。

100%可移植的解決方案,將在所有C編譯器上編譯,是自己創建這樣一個常量。 由於C是一種編譯語言,因此無論如何都必須為每個操作系統編譯不同的代碼。 只需添加一個名為os.c的文件,在其中放置相關的#define或常量,然后將其鏈接到您的程序。 編譯不同操作系統時,唯一需要更改的是make OS特定os.c的make文件路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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