C言語で定義済みマクロによるコンパイラ及びOS判定
===========================================
C言語で様々なOSやコンパイラで共通ソースにしたい時、条件コンパイルで切換えたい場合がある。その時に利用するマクロ名について、備忘録を残す。
===== 定義済みマクロ名 =====
定義済みマクロは、下記コマンドで確認できる。
$ echo | gcc -dM -E -
$ echo | arm-none-eabi-gcc -dM -E -
==== コンパイラ判定 ====
^ コンパイラ ^ マクロ名 ^ 定義値 ^ 備考 ^
| GCC | `__GNUC__` | バージョン番号 | |
| GCC/ARM | `__arm__` | | |
| IAR EWARM | `__ICCARM__` | | |
| ARMコンパイラ | ` __CC_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__` | | (Apple silliconでも可) |
==== 64bit環境判定 ====
^ 実行環境 ^ マクロ名 ^ 定義値 ^ 備考 ^
| Linux/macOS | `__x86_64` | | |
| macOS(Apple sillicon) | `__arm64__` | | |
===== 参考 =====
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]]