2017-03-06 21 views
1

たとえば、 "WIN32"マクロが定義されているかどうかを確認して、Windowsが使用されているかどうかを確認できます。そして、私は同じ動作をしたいが、Xlibが使用されているかどうかをチェックする。しかし、私はそれが定義されていることを知るためにXlibが定義するものは分かりません。 あなたは私がここで何を意味するのか分からない場合の例である:#ifdefを使用してXlibが使用されているかどうかを確認するには?

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

、私はそれがXlibには使用何かをするという方法で、これを変更したいと思います。

文法上の誤りがありましたら残念ですが、私は母国語ではありません。

+0

あなたの 'X11'ヘッダファイルを探してください。 '/ usr/include/X11'に' _X11_XLIB_H_'を定義する 'Xlib.h'か' X_H'を定義する 'X.h'があります。 'Xlib.h'はあなたの友人です。 – jiveturkey

答えて

1

マクロWIN32は、#include <windows.h>を前もって指定した場合、またはコンパイラフラグ(-DWIN32)にマクロを設定した場合にのみ定義されます。 Xlibの場合、前に#include <X11/X.h>を含めると、マクロX_PROTOCOLと非常に似ています。

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

もう一つの方法は、あなたが前に#include <X11/Xlib.h>が含まれている場合_XLIB_H_を使用することですが、私はアンダースコアで始まる識別子は、実装に予約されていないためと、この識別子は変化しないという保証はありません。

+0

私はWindows版やLinux版のコードをエラーなく使用する必要があるときはいつでも判断する方法がないと思っています:/ – digitcrusher

+0

@digitcrusher 'WIN32'ではなく' _WIN32'を使うとよいでしょう。含まれていない。他にも:[この質問](http://stackoverflow.com/questions/6649936/c-compiling-on-windows-and-linux-ifdef-switch) – Constantin

+0

X_PROTOCOLや他のものをincludeなしで動かせるようにできますか? – digitcrusher

1

「WIN32」マクロがWIN32マクロは、Windows OSを対象とコンパイラがデフォルトで定義されて

を定義している場合は、Windowsをチェックすることによって、使用されている場合は、確認することができます。その目的は、プログラムが必ずしもグラフィックサブシステムではなくWindows OS APIを検出できるようにすることです。

X11とOSはありません。 オプションの Windowsを含む多くのオペレーティングシステムでインストールされ実行されるユーザーランドソフトウェアです。 Windows用のX11プログラムをコンパイルするときは、他のWindowsプログラムと同様にWIN32が定義されます。

コンパイラは、X11がインストールされているシステムでは、デフォルトで何も定義しません。

ビルド時にX11を検出したいのであれば、おそらくGNU autotoolsやCMakeのようなメタ構築ツールでしょう。

関連する問題