Comment puis-je détecter si le système d'exploitation est Windows en C++/C?Détecter si le système d'exploitation Windows est en C++
Merci
Comment puis-je détecter si le système d'exploitation est Windows en C++/C?Détecter si le système d'exploitation Windows est en C++
Merci
Vous ne devriez pas avoir à faire cela. Vous devriez compiler pour chaque plate-forme séparément, par conséquent vous devriez déjà savoir si la plate-forme est des fenêtres pour n'importe quel binaire donné. Fondamentalement, il est inutile de vérifier le système d'exploitation à l'exécution, donc la possibilité de le faire est un point discutable.
Pour vous rappeler à l'avenir comment fonctionne C++ en ce qui concerne la compilation sur différentes plates-formes, souvenez-vous de l'expression "write once, compile anywhere".
Ce que je recommande est la fixation d'un drapeau compiletime qui provoque la compilation à se comporter différemment selon si oui ou non vous compilez pour les fenêtres.
Je sais que cela peut sembler un peu paresseux, mais je vais utiliser des tonnes de fonctionnalités os spécifiques, donc j'ai besoin de savoir si ses fenêtres ou non – Daniel
@Daniel: Alors, vous cherchez à faire cela au compiletime ou runtime? – Cam
@Cam runtime, comme indiqué ci-dessus dans l'autre commentaire – Daniel
Utilisez
getenv("windir");
Si vous obtenez NULL alors il est pas de fenêtres.
Cela fonctionne depuis% windir% ne devrait être défini sur les systèmes Windows. C'est un hack bon marché et sale bien sûr.
Je suis à peu près certain que cela est mauvais. – Cam
C'est un hack. Vous pouvez également utiliser getenv ("OS") et vérifier par rapport à "Windows" et "Windows_NT" mais cela nécessite un certain traitement de la mémoire. Il existe d'autres méthodes formelles mais cette fonction doit être séparée des bibliothèques C standard. –
-1: Je peux définir windir sur Linux ... –
#ifdef _WIN32
cout << "This is Windows." << endl;
#endif
Cela vous permettra de définir des blocs pour Windows uniquement. Tant que la macro du préprocesseur est définie.
Ceci est une chose de compilation, pas une chose d'exécution.
Si c'est l'exécution, vous pouvez faire référence à Wine (sur les systèmes d'exploitation non-Windows). Sinon, c'est tout simplement impossible. Les binaires Windows ne peuvent pas être exécutés dans d'autres systèmes d'exploitation (sauf s'ils ont Wine).
S'il est temps de compilation, double possible: Are there any macros to determine if my code is being compiled to Windows?
(voir réponse acceptée ci-dessus)
code Comment compilez-vous qui est binaire compatible avec plusieurs systèmes d'exploitation? –
Vous posez des questions sur les temps de compilation ou d'exécution? – birryree
runtime, lorsque le programme s'exécute – Daniel