2017-03-26 12 views
1

これについて多くの質問がありますが、コンパイル時のマクロを使用することをお勧めします。私はそれが通常、実行時にチェックするのが理にかなっていないことを知っています。コンパイル時マクロを使用する方が良いですが、ここでは使用できません(#ifdef _WIN32は書き込めません)。 Cコードは、より高いレベルの言語に埋め込まれています。私が持っている唯一の機能は、isWindows()のようなものです。それを再コンパイルせずにWindowsとLinuxの両方でこれを行うことができるライブラリはありますか?実行時にユーザーのオペレーティングシステムを確認する方法は?

+1

'int isWindows(){#ifdef _WIN32 return 1; #else return 0; } 'これはうまくいかないでしょうか? – DeiDei

+0

特定のホストOSに関する情報を取得する汎用機能はありません。実装(コンパイラ、ライブラリなど)は、その情報で構成されているため、コンパイルするホストシステムを知っています。したがって、Cプログラムが実装からその情報を取得するための最初のステップは、特定のマクロ(32ビットWindowsターゲットを検出するための '#ifdef _WIN32 'など)をテストすることであり、2つ目はそのターゲット固有の関数を使用することです。したがって、このような手法を使って 'isWindows()'を書くことができます。非Windows OSは、Windowsが 'isUnix()'を提供しないのと同じように、Windows OSを提供しません。 – Peter

+0

私はLinuxの実行ファイルがWindows上で実行されるとは思わない、またはその逆の場合もあります。 –

答えて

0

実行時にhttps://sourceforge.net/p/predef/wiki/OperatingSystems/という情報が必要な場合は、これらのコンパイル時にすべての関数を定義し、実行時にクエリを実行します。 私は誰も知りません。なぜなら、それは些細なことであり、皆はコンパイル時にそれをします。

ほとんどの高水準言語は、OS名と型を取得するライブラリ呼び出しを持っていますが、通常はコンパイル時にそれを正規化するか、独自の高レベルライブラリを使用します。

関連する問題