2017-03-06 3 views
1

Zum Beispiel können Sie überprüfen, ob Windows verwendet wird, indem Sie überprüfen, ob das Makro "WIN32" definiert ist. Und ich möchte das gleiche Verhalten bekommen, aber prüfen, ob Xlib verwendet wird. Aber ich weiß nicht, was Xlib definiert, um zu wissen, dass es definiert ist. Wenn Sie nicht wissen, was ich meine hier ein Beispiel:Wie überprüft man, ob Xlib mit #ifdef verwendet wird?

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

und ich würde das gerne in einer Art und Weise ändern, dass es etwas tut, wenn Xlib verwendet.

Es tut mir leid, wenn es einige Grammatikfehler gibt, aber ich bin kein englischer Muttersprachler.

+0

Suchen Sie einfach Ihre 'X11'-Header-Dateien. In '/ usr/include/X11' gibt es' Xlib.h', das '_X11_XLIB_H_' definiert, oder es gibt' X.h', das 'X_H' definiert. 'Xlib.h' ist jedoch dein Freund. – jiveturkey

Antwort

1

Das Makro WIN32 ist nur definiert, wenn Sie #include <windows.h> davor eingefügt haben oder das Makro in Ihren Compiler-Flags (-DWIN32) gesetzt haben. Für Xlib könnten Sie das Makro X_PROTOCOL sehr ähnlich verwenden, wenn Sie zuvor #include <X11/X.h> eingefügt haben.

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

Ein anderer Weg wäre _XLIB_H_ zu verwenden, wenn Sie #include <X11/Xlib.h> vor inbegriffen, aber ich würde nicht, weil Bezeichner mit einem Unterstrich beginnen mit der Umsetzung reserviert und es gibt keine Garantie, dass diese Kennungen nicht ändern werden.

+0

Jetzt sieht es für mich aus, dass es keine Möglichkeit gibt zu bestimmen, wann ich Windows- oder Linux-Version meines Codes ohne Fehler verwenden sollte:/ – digitcrusher

+0

@digitcrusher Sie möchten '_WIN32' anstelle von' WIN32' verwenden, das wird funktionieren ohne irgendwelche include. Siehe auch: [diese Frage] (http://stackoverflow.com/questions/6649936/c-compiling-on-windows-and-linux-ifdef-switch) – Constantin

+0

Können Sie X_PROTOCOL oder etwas anderes ohne Include arbeiten? – digitcrusher

1

Sie können überprüfen, ob Windows-wenn „WIN32“ Makro durch die Überprüfung verwendet wird, wird

definiert Der WIN32 Makro standardmäßig von Compilern definiert ist, auf dem Windows OS Ziel. Sein Zweck besteht darin, das Programm Windows OS-API erkennen zu lassen, nicht unbedingt irgendein Grafik-Subsystem.

X11 ist nicht und OS. Es ist optional Userland-Software, die unter vielen Betriebssystemen, einschließlich Windows installiert und ausgeführt wird. Beim Kompilieren eines X11-Programms für Windows wird WIN32 wie für jedes andere Windows-Programm definiert.

Kein Compiler definiert standardmäßig irgendetwas auf einem System, auf dem X11 installiert ist.

Wenn Sie X11 zum Zeitpunkt der Erstellung erkennen möchten, ist Ihre beste Wette wahrscheinlich ein Meta-Build-Tool wie GNU Autotools oder CMake.

Verwandte Themen