2008年2月10日のブックマーク (1件)

  • ITエンジニアの技術メモ C言語の関数呼び出し - extern "C"

    ■外部シンボル CやC++の関数名は、オブジェクトファイルの中では「シンボル名」で扱われます。 Cの場合「シンボル名」はほぼ関数名と同じになりますが、 C++では色々な変換が加えられ、関数名とは異なる名前になります。 例えば、int hoge(int a) という関数がある場合、 C言語 → _hoge C++言語 → __Z4hogei のようなシンボル名になります。 実際にどのようなシンボル名になるかは処理系に依存するのですが、 C++の場合はシンボル名に仮引数の数や型などで修飾される事がポイントです。 C++では何故このようにややこしい変換を行っているかというと オーバーロードや名前空間などの実現の為です。 ■C++からCの関数を呼び出す  C++から異なる翻訳単位のCの関数を呼び出す場合、  上記のシンボル名のつけ方の違いから、どの関数を呼び出しているかが  分からなくなる問題が発