Maison >développement back-end >C++ >Comment puis-je détecter le système d'exploitation dans le préprocesseur C pour le développement multiplateforme ?

Comment puis-je détecter le système d'exploitation dans le préprocesseur C pour le développement multiplateforme ?

DDD
DDDoriginal
2024-12-26 01:34:09864parcourir

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

Détection des systèmes d'exploitation dans le préprocesseur C pour le développement multiplateforme

La détermination du système d'exploitation sous-jacent pendant l'étape du préprocesseur est cruciale pour le développement multiplateforme code C/C de la plateforme. Heureusement, la plupart des compilateurs définissent des macros spécifiques qui permettent une détection fiable.

Macros GCC et Clang

Les compilateurs GCC et Clang fournissent une liste complète de macros prédéfinies qui peuvent être utilisées pour l'identification du système d'exploitation :

  • Pour Windows : WIN32, _WIN32, WIN32__, __NT
  • Pour macOS : APPLE
  • Pour Linux : linux
  • Pour Unix : unix
  • Pour POSIX : _POSIX_VERSION

Exemple pour GCC

Voici un exemple de la façon dont ces macros peuvent être utilisées dans une compilation 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

Important Considérations

  • La disponibilité des macros prédéfinies varie en fonction du compilateur utilisé.
  • Il est recommandé d'utiliser des protections de macros pour éviter les inclusions multiples d'en-têtes.
  • _WIN32 (sans trait de soulignement) permet aux IDE de mettre en évidence les sections de code appropriées pour les plates-formes Windows.
  • Windows x64 les compilateurs définissent toujours _WIN32, il peut donc être utilisé comme base commune, puis utiliser un #ifdef _WIN64 interne pour les définitions spécifiques à 64 bits.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn