質問: 現在、他人が書いたC++プログラムを解析しているのですが、 不明な文法が有ります。 調べてみましたが、解決できず質問させて頂きます。 擬似的に書くと以下のようになっています。 ``` (in hoge.cpp) extern "C" void foo(void){ // do something } ``` extern "C"で調べると、 c++側の関数のプロトタイプ宣言でextern "C"をつけておくと 別のC言語側で定義された関数を呼び出すことが出来る、というのは理解出来ました。 しかしながらこちらはC++側の関数定義の前に付いているので、 どういう意味なのかわかりかねています。 なお、外部ライブラリを使っているのですが、それがCで書かれている可能性が有り、 それが絡んでいる可能性が有ります。 曖昧な部分が多く恐縮ですが、知見ご存じの方ご教示頂ければ幸いです。 宜しくお願い致します。
回答: `extern "C"`は、プロトタイプ宣言だけでなく、関数の本体につけても同様に動きます。その意味は、「関数の(リンク用の)名前をC言語的なものにする」ということです。 C++では関数オーバーロードがあることもあって、**名前修飾**といって、引数名まで込みにしてリンク用の名前を生成します。これではC++同士でしかやり取りできないので、`extern "C"`とすることで、C言語としての呼び出しができるようにしておく、という仕組みです。