Comment puis-je détecter si le système d'exploitation est Windows en C ++ / C? P>
3 Réponses :
Vous pouvez utiliser si vous obtenez Ceci fonctionne depuis http: //www.cplusplus.com/reference/clibrary/cstdlib/getenv/ p> p> getenv () code> de cstdlib strong> comme: null code> null code> Ensuite, ce n'est pas des fenêtres. p> % windir% code> ne doit être défini que sur les systèmes Windows. C'est un piratage bon marché et sale. P>
Je suis assez certain que cela fait c'est mauvais.
C'est un hack. Vous pouvez également utiliser getenv ("OS") et vérifier "Windows" et "Windows_NT", mais cela nécessite une manipulation de la mémoire. Il existe d'autres méthodes formelles à ce que cette fonction devrait être distincte des bibliothèques C standard.
-1: Je peux définir Windir sur Linux ...
#ifdef _WIN32 cout << "This is Windows." << endl; #endif This will allow you define blocks for windows only. As long as the preprocessor macro is defined. This is a compile time thing, not a runtime thing.
Cela fonctionnera-t-il pour Windows 64 bits? Je peux tester un succès, mais peut-être la peine d'être modifiée pour les futurs lecteurs.
Si c'est le temps d'exécution, vous pouvez vous référer au vin (sur des systèmes d'exploitation non-Windows). Sinon, c'est tout simplement impossible. Les binaires Windows ne peuvent pas courir dans d'autres systèmes d'exploitation (sauf s'ils ont du vin). P>
Si c'est le temps de compilation, dupliquer possible: y a-t-il macros pour déterminer si mon code est compilé vers Windows? P>
(voir réponse acceptée ci-dessus) p>
Comment compilez-vous le code binaire compatible avec plusieurs systèmes d'exploitation?
Vous demandez-vous du temps de compilation ou de l'exécution?
Runtime, lorsque le programme fonctionne
Vous ne devriez pas avoir à le faire du tout, en considérant que vous devrez construire du code qui fonctionne sous Windows, qui est incompatible avec des binaires que vous construiriez pour Linux, Mac ou FreeBSD, etc. Lisez vos autres commentaires, ce que vous avez Virez-vous vraiment est de compiler la détermination de l'heure de construction de code spécifiquement pour Windows.
Lorsque vous compilez un programme jusqu'à "Code natif" (code de machine spécifique à la CPU), vous devez normalement cibler un système d'exploitation spécifique (et sa version souvent) que l'exécutable résultant sera en mesure de fonctionner. Ceci est différent des langages interprétés comme Ruby ou Java où un programme de code natif existe pour lire le code source ou une représentation de celui-ci ("code octet") qui représente le programme. Néanmoins, il vous est possible de compiler un programme Windows et de l'exécuter sous un émulateur Windows, tel que le vin de Linux, c'est ce que vous voulez pouvoir reconnaître?
Vous ne pouvez pas le faire au moment de l'exécution, car le processus de compilation crée un code pour une plate-forme spécifique. Il ne fonctionnera tout simplement pas sur d'autres plates-formes; Vous devez recompiler pour eux. Par conséquent, votre programme Windows est Toujours B> en cours d'exécution sous Windows, car sinon il ne fonctionne pas du tout.