2010-12-06 3 views

Répondre

1

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.

+0

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

+0

@Daniel: Alors, vous cherchez à faire cela au compiletime ou runtime? – Cam

+0

@Cam runtime, comme indiqué ci-dessus dans l'autre commentaire – Daniel

4

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.

http://www.cplusplus.com/reference/clibrary/cstdlib/getenv/

+3

Je suis à peu près certain que cela est mauvais. – Cam

+0

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. –

+10

-1: Je peux définir windir sur Linux ... –

22
#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.

0

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)

Questions connexes