C++ リンケージ指定 extern “C”

リンケージ指定とは?

C++では、C言語の仕様を含むため、C言語の記述ができます。

しかし、C言語とC++のコンパイルの仕方に違いがあり、
完全にC言語でコンパイルされたライブラリ、
オブジェクトファイルなどを
C++から使う場合には、
リンケージ指定と言う機能を使う事になります。

リンケージ指定すると、
「その部分はC言語でコンパイルされている部分だから
適切に処理してくれ。」
とコンパイラに教える役目を果たします。

例えば、C言語で作ったライブラリmylib.libがあり、
そのヘッダファイルは、mylib.hの場合、
それをC++から使うならば、以下のような記述が必要です。

extern "C"
{
#include "mylib.h"
}

このextern “C”で囲まれたブロックが
リンケージ指定された部分と言う意味です。

関数単位でリンケージ指定する

ある特定の関数をC言語スタイルでコンパイルしたい場合も
リンケージ指定を使います。

この場合、関数のプロトタイプ宣言のみをリンケージ指定すればOKです。

extern "C"
{
   void func1(void);
   void func2(void);
}
スポンサーリンク

標準ライブラリ関数について

C言語標準のライブラリ関数はC言語でコンパイルされているので、
リンケージ指定が必要ではないか?と思われるかもしれませんが、

見えないところで
リンケージ指定をやってくれているコンパイラが多いようなので、
通常、気にする事はほとんどありません。