externキーワードはコンパイラに対して、変数が現在のスコープの外で宣言されていることを伝えるのに使用されます。 externのついた変数定義文は、そのスコープ内ではメモリ空間が確保されることはありません。 他の場所で適切に定義されていなければなりません。
extern文を使用すると、複数のファイルにスコープがまたがるデータを定義することができるようになります。
関数宣言につけるときは、”C”もしくは”C++“という文字列リテラルを付けます。この文字列はコンパイル時の名前のマングリングのルールに影響を与えます。以下のコード:
extern "C" int plain_c_func(int param);
はC++コードから、plain_c_funcという名前のC言語のライブラリの関数の呼び出しができるようにします。
参考サイト: extern "LANG" リンク問題(英語)