C言語で定義済みマクロによるコンパイラ及びOS判定 =========================================== C言語で様々なOSやコンパイラで共通ソースにしたい時、条件コンパイルで切換えたい場合がある。その時に利用するマクロ名について、備忘録を残す。 定義済みマクロ名 --------------- 定義済みマクロは、下記コマンドで確認できる。 $ echo | gcc -dM -E - $ echo | arm-none-eabi-gcc -dM -E - ### コンパイラ判定 ^ コンパイラ ^ マクロ名 ^ 定義値 ^ 備考 ^ | GCC | `__GNUC__` | バージョン番号 | | | GCC/ARM | `__arm__` | | | | IAR EWARM | `__ICCARM__` | | | | ARMコンパイラ | ` __ARMCC_VERSION` | | | | インテルコンパイラ | `__INTEL_COMPILER` | | | | Borland C++ | `__BORLANDC__` | | | | Appleコンパイラ | `__APPLE__` | | | ### 実行環境判定 ^ 実行環境 ^ マクロ名 ^ 定義値 ^ 備考 ^ | UNIX | `__unix__` | | `__unix`でもよい | | Linux | `__linux__` | | `__linux`でもよい | | Windows(32bit) | `_WIN32` | | `WIN32`でもよい | | Windows(64bit) | `_WIN64` | | | | msys2(32bit) | `__MINGW32__` | | | | msys2(64bit) | `__MINGW64__` | | | | Cygwin | `__CYGWIN__` | | | | macOS | `__MACH__` | | | ### 64bit環境判定 ^ 実行環境 ^ マクロ名 ^ 定義値 ^ 備考 ^ | Linux/macOS | `__x86_64` | | | 参考 ---- 1. [[https://blog.goo.ne.jp/yamadokoro/e/3f3803fbedff1a535d15da364bcc1a16|C言語 マクロ コンパイル 判定 OS コンパイラ]] 2. [[https://firewood.hatenadiary.jp/entries/2005/06/01|cross platform development]] 3. [[http://tekitobibouroku.blog42.fc2.com/blog-entry-39.html|条件コンパイル(インテルコンパイラ icc の判別)]] 4. [[https://qiita.com/naohikowatanabe/items/a4e1a3f8080210257a42|gcc のプリプロセッサの定義済みマクロ(Predefined Macros)の確認方法]] 5. [[https://tech.ckme.co.jp/cpp/cpp_predef.shtml|コンパイラの種類とバージョンを知るためのpre-defineされたマクロは?]] 6. [[https://wiki.onakasuita.org/pukiwiki/?GCC%2F%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF%E3%83%9E%E3%82%AF%E3%83%AD%2FARM|GCC/定義済みマクロ/ARM]]