ホームページ >バックエンド開発 >C++ >クロスプラットフォーム開発の C プリプロセッサでオペレーティング システムを検出するにはどうすればよいですか?

クロスプラットフォーム開発の C プリプロセッサでオペレーティング システムを検出するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-26 01:34:09864ブラウズ

How Can I Detect the Operating System in the C Preprocessor for Cross-Platform Development?

クロスプラットフォーム開発のための C プリプロセッサでのオペレーティング システムの検出

プリプロセッサ段階で基盤となるオペレーティング システムを決定することは、クロスプラットフォーム開発にとって重要です。プラットフォームの C/C コード。幸いなことに、ほとんどのコンパイラは、信頼性の高い検出を可能にする特定のマクロを定義しています。

GCC および Clang マクロ

GCC および Clang コンパイラは、使用できる事前定義マクロの包括的なリストを提供します。 OS 識別用:

  • Windows の場合: WIN32、_WIN32、 WIN32__、__NT
  • macOS の場合: APPLE
  • Linux の場合: linux
  • Unix の場合: unix
  • POSIX の場合: _POSIX_VERSION

GCC の例

これらのマクロをどのように使用できるかの例を次に示します。 GCCで利用されるコンパイル:

#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
  // Define something for Windows (32-bit and 64-bit)
  #ifdef _WIN64
    // Define something for Windows (64-bit only)
  #else
    // Define something for Windows (32-bit only)
  #endif
#elif __APPLE__
  #include <TargetConditionals.h>
  #if TARGET_IPHONE_SIMULATOR
    // iOS, tvOS, or watchOS Simulator
  #elif TARGET_OS_MACCATALYST
    // Mac's Catalyst (ports iOS API into Mac, like UIKit).
  #elif TARGET_OS_IPHONE
    // iOS, tvOS, or watchOS device
  #elif TARGET_OS_MAC
    // Other kinds of Apple platforms
  #else
    #error "Unknown Apple platform"
  #endif
#else
  #error "Unknown compiler"
#endif

重要な考慮事項

  • 事前定義マクロの利用可能性は、使用するコンパイラーによって異なります。
  • を使用することをお勧めします。ヘッダーの複数のインクルードを避けるためのマクロ ガード。
  • _WIN32 (アンダースコアなし) を使用すると、IDE で Windows プラットフォームの適切なコード セクションを強調表示できます。
  • Windows x64 コンパイラーは依然として _WIN32 を定義しているため、これを共通ベースとして使用し、64 ビット用の内部 _WIN64 #ifdef を使用できます。特定の定義。

以上がクロスプラットフォーム開発の C プリプロセッサでオペレーティング システムを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。