コードがコンパイルされるオペレーティングシステムに基づいて、さまざまなことを実行するためのコードが必要です。私はこのようなものを探しています:
#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif
これを行う方法はありますか?同じことをするより良い方法はありますか?
コードがコンパイルされるオペレーティングシステムに基づいて、さまざまなことを実行するためのコードが必要です。私はこのようなものを探しています:
#ifdef OSisWindows
// do Windows-specific stuff
#else
// do Unix-specific stuff
#endif
これを行う方法はありますか?同じことをするより良い方法はありますか?
The Predefined Macros for OS site has a very complete list of checks. Here are a few of them, with links to where they're found:
_WIN32
Both 32 bit and 64 bit
_WIN64
64 bit only
__CYGWIN__
See this related question on some of the pitfalls of using this check.
unix
__unix
__unix__
__APPLE__
Also used for classic
__MACH__
Both are defined; checking for either should work.
__linux__
linux
Obsolete (not POSIX compliant)
__linux
Obsolete (not POSIX compliant)
__FreeBSD__
__ANDROID__
WindowsでGCCが定義するものを表示します。
gcc -dM -E - <NUL:
Linuxの場合:
gcc -dM -E - </dev/null
MinGWで事前定義されたマクロ:
WIN32 _WIN32 __WIN32 __WIN32__ __MINGW32__ WINNT __WINNT __WINNT__ _X86_ i386 __i386
UNIXの場合:
unix __unix__ __unix
ほとんどの場合、特定の機能が存在するかどうかを確認することをお勧めします。例: 関数pipe()
が存在するかどうか。
私はあなたが探していると思います:
_WIN32
- コンパイル ターゲットが 32 ビット ARM、64 ビット ARM、x86、または x64 の場合は 1 として定義されます。それ以外は未定義_WIN64
- コンパイル ターゲットが 64 ビット ARM または x64 の場合は 1 として定義されます。それ以外の場合は未定義。
私はあなたが探していると思います:
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
事前に定義された適切なコンパイラをグーグルで検索してください。
C 標準に従って設定された標準マクロはありません。一部の C コンパイラは、一部のプラットフォームで 1 つを設定します (たとえば、Apple のパッチを適用した GCC は、マクロを設定して、Apple システムで Darwin プラットフォーム用にコンパイルしていることを示します)。プラットフォームや C コンパイラも何かを設定する場合がありますが、一般的な方法はありません。
hayalci が言ったように、ビルド プロセスでこれらのマクロを何らかの方法で設定するのが最善です。コードを変更せずに、ほとんどのコンパイラでマクロを定義するのは簡単です。-D MACRO
単純に GCC に渡すことができます。
gcc -D Windows
gcc -D UNIX
そしてあなたのコードで:
#if defined(Windows)
// do some cool Windows stuff
#elif defined(UNIX)
// do some cool Unix stuff
#else
# error Unsupported operating system
#endif
OSsymbol
は、#define OSsymbol
ターゲットOS を識別するためのシンボルです。#ifdef OSsymbol
#define
通常、選択した OS シンボルを定義する中央ヘッダー ファイルをインクルードし、OS 固有のインクルードおよびライブラリ ディレクトリを使用してコンパイルおよびビルドします。
開発環境を指定していませんでしたが、コンパイラが一般的なプラットフォームと OS のグローバルな定義を提供していると確信しています。
http://en.wikibooks.org/wiki/C_Programming/Preprocessorも参照してください。
すべてを要約すると、ここに役立つリンクがたくさんあります。