2017-03-06 3 views
1

Par exemple, vous pouvez vérifier si Windows est utilisé en vérifiant si la macro "WIN32" est définie. Et je voudrais avoir le même comportement mais pour vérifier si Xlib est utilisé. Mais je ne sais pas ce que définit Xlib pour savoir qu'il est défini. Si vous ne savez pas ce que je veux dire ici est un exemple:Comment vérifier si Xlib est utilisé aveC#ifdef?

#ifdef WIN32 //Check if WIN32 is defined 
//Do something 
#endif 

Et je voudrais changer cela d'une manière qu'il fait quelque chose quand Xlib utilisé.

Je suis désolé s'il y a des erreurs grammaticales mais je ne suis pas un locuteur natif anglais.

+0

Allez simplement trouver vos fichiers d'en-tête 'X11'. Dans '/ usr/include/X11' il y a' Xlib.h' qui définit '_X11_XLIB_H_' ou il y a' X.h' qui définit 'X_H'. "Xlib.h" est votre ami cependant. – jiveturkey

Répondre

1

La macro WIN32 n'est définie que si vous avez précédemment inclus #include <windows.h> ou défini la macro dans les indicateurs du compilateur (-DWIN32). Pour Xlib vous pouvez utiliser la macro X_PROTOCOL très similaire si vous avez déjà inclus #include <X11/X.h> auparavant.

#ifdef X_PROTOCOL //Check if X_PROTOCOL is defined 
//Do something 
#endif 

Une autre façon serait d'utiliser _XLIB_H_ si vous avez inclus #include <X11/Xlib.h> avant, mais je pas parce que les descripteurs commençant par un underscore sont réservés à la mise en œuvre et il n'y a aucune garantie que ces identifiants ne changeront pas.

+0

Maintenant, il me semble qu'il n'y a aucun moyen de déterminer quand je devrais utiliser la version Windows ou Linux de mon code sans aucune erreur:/ – digitcrusher

+0

@digitcrusher Vous pouvez utiliser '_WIN32' au lieu de' WIN32', cela fonctionnera sans inclure. Voir aussi: [cette question] (http://stackoverflow.com/questions/6649936/c-compiling-on-windows-and-linux-ifdef-switch) – Constantin

+0

Pouvez-vous faire X_PROTOCOL ou autre chose au travail sans inclure? – digitcrusher

1

vous pouvez vérifier si Windows est utilisé en vérifiant si « WIN32 » macro est définie

La WIN32 macro est définie par défaut par les compilateurs qui ciblent Windows. Son but est de permettre au programme de détecter l'API Windows OS, pas nécessairement un sous-système graphique.

X11 ne l'est pas et OS. C'est optionnel logiciel qui s'installe et s'exécute sous de nombreux systèmes d'exploitation, y compris Windows. Lors de la compilation d'un programme X11 pour Windows, WIN32 sera défini, comme pour tout autre programme Windows.

Aucun compilateur ne définit quoi que ce soit par défaut sur un système où X11 est installé.

Si vous voulez détecter X11 au moment de la construction, votre meilleur pari est probablement un outil de méta-construction comme GNU autotools ou CMake.