リンケージ指定とは?
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言語でコンパイルされているので、
リンケージ指定が必要ではないか?と思われるかもしれませんが、
見えないところで
リンケージ指定をやってくれているコンパイラが多いようなので、
通常、気にする事はほとんどありません。