C向けのライブラリのコードをながめていたらちょくちょく以下のようなコードをみる.
#ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* Cのコードがたくさん */ #ifdef __cplusplus } #endif /* __cplusplus */
なんだろうと思って調べてみたら.
- __cplusplus
- g++でコンパイルされるとdefineされるマクロ
- extern "C" { /* Cのコード */ }
- ブレースでかこまれた範囲で,リンカでの識別子の扱い方がCスタイルになる
らしい."この範囲のコードはCで書かれてるから,g++でコンパイルするときはCだとおもってよろしくしてあげてね"ってことみたい.
Cで書かれたライブラリはCで使われることもC++で使われることもあるから,こういうコードでうまくその差を吸収してあげてるんだなー.
CとかC++のコードみてると,リンカとかメモリ効率とかLL使ってると触れられないところに触れられておもろい.