Je voudrais détecter si l'OS sur lequel je compile est Windows. Existe-t-il une macro simple que je peux vérifier pour le vérifier?
Réponses
Trop de publicités?[Edit: je suppose que vous voulez utiliser au moment de la compilation des macros afin de déterminer dans quel environnement vous êtes sur. Peut-être que vous souhaitez afin de déterminer si vous êtes en cours d'exécution sur Wine sous Linux ou quelque chose à la place de Windows, mais en général, votre compilateur cibles dans un environnement spécifique, et qui est soit Windows (DOS) ou il ne l'est pas, mais c'est rarement (jamais?) les deux.]
Certains compilateurs offrent des macros pour indiquer un Windows environnement de construction. Mais elles varient d'un compilateur de compilateur, et même sur le même compilateur sous Windows si la cible de l'environnement n'est pas exclusivement windows. Habituellement, c'est __WIN32__
, mais pas toujours.
#if defined (__WIN32__)
// Windows stuff
#endif
Parfois, il peut être _WIN32
, __CYGWIN32__
, ou peut-être juste le compilateur indicateur (_MSC_VER
).
Si vous connaissez l'environnement, vous serez en bâtiment (depuis le makefile), alors vous pouvez généralement passer dans l' #define
sur la ligne de commande, comme "g++ -D __WIN32__ yourfile.c
".
Il y a un certain nombre de différentes méthodes de détection, de compilation, d'accueil, et les environnements d'exécution. Tous les selon exactement ce que vous voulez savoir. Il existe trois grands types de milieux:
- Construire: C'est l'environnement dans lequel le programme est compilé.
- Hôte: C'est l'environnement dans lequel le programme est en cours d'exécution.
- Cible: Dans le cas de la génération de code outils (tels que les compilateurs), c'est là que le code généré sera exécuté.
Si vous êtes à la cross-compilation, la génération de l'hôte et de l'environnement, peuvent être complètement différents (ce qui est fréquent lors de la construction d'applications embarquées, mais pas très commun lors de la construction de bureau/serveur d'applications), et en général, vous ne peut pas exécuter le binaire compilé sur le système utilisé pour la compilation. Sinon, l'hôte de l'environnement doit être compatible avec l'environnement de construction: par exemple, la construction d'une application sur XP qui fonctionne sur Vista.
Les macros du préprocesseur C ne peut pas être utilisé pour vous raconter les détails du système hôte (c'est à dire ce que vous en cours d'exécution sur); ils peuvent seulement vous dire ce que le code a été compilé. Dans le cas de windows, les deux plus importants des macros sont:
- _WIN32 signifie que l'API Win32 est disponible. Il n'est pas de vous dire quel compilateur que vous utilisez, en fait _WIN32 est défini à la fois lors de l'utilisation de Cygwin de la GCC et de MinGW GCC. Donc, ne pas utiliser _WIN32 afin de déterminer si vous êtes d'être compilé avec Visual Studio.
-
_MSC_VER
vous indique que le programme est compilé avec Microsoft Visual C/C++. Enfin, presque._MSC_VER
est également définie lors de l'utilisation d'Intel C++ compiler qui est destiné à être un remplacement drop-in pour Visual C++.
Il y a un tas d'autres macros décrites dans la documentation de Visual Studio.
Si vous voulez savoir à quelle version exacte de Windows que vous utilisez, vous devrez utiliser d'exécution des fonctions telles que GetVersion() (comme décrit dans les autres réponses).
Vous pouvez obtenir des réponses précises si vous nous avez dit exactement ce que vous souhaitez vérifier.
Si vous exécutez du code ciblé MS Windows, vous pouvez appeler GetVersion () ou GetVersionEx () pour plus d'informations et pour identifier la variante de Windows sur laquelle vous exécutez.
Pour plus d'informations, consultez les informations MSDN.
http://msdn.microsoft.com/en-us/library/ms724451 (VS.85) .aspx