Solarisで作ったアプリをLinuxにポーティングするため、Solaris、Linux固有の処理を#ifdefで分けて記載する必要があって、#ifdefの識別子が何だったか分からなくて調べたので、メモ残しとく。
とりあえずこんなソースを用意。
#include <stdio.h> int main() { puts("--start--"); #ifdef __unix puts("unix"); #endif #ifdef __linux puts("linux"); #endif #ifdef __GNUC__ puts("GNUC"); #endif #ifdef __sun puts("sun"); #endif #ifdef __sparc puts("sparc"); #endif #ifdef __solaris puts("solaris"); #endif puts("--end--"); return 0; }
$ gcc ifdef.c $ ./a.out --start-- unix linux GNUC --end--
Solaris(SPARC)環境での結果。
Sunstudioとgccの2つで試した。
$ /opt/SUNWspro/bin/cc ifdef.c $ ./a.out --start-- unix sun sparc --end-- $ $ /usr/sfw/bin/gcc ifdef.c $ ./a.out --start-- unix GNUC sun sparc --end--
Solaris(x86)環境での結果。
gccはインストールされてない環境だったのでSunstudioでの確認のみ。
$ /opt/SUNWspro/bin/cc ifdef.c $ ./a.out --start-- unix sun --end--
とりあえずLinuxとSolarisで#ifdefで処理分けるときの識別子は
Linux | Solaris |
---|---|
__linux | __sun |
を使えばいいんだな。
x86用の識別子は32bitアプリと64bitアプリの絡みもあって何だか面倒くさそうなので、後で調べることにしよう。