外部リンケージ

C C のみの始まり。

グロー バル・スコープでは、static ストレージ・クラス指定子なしで宣言された、 以下の種類のエンティティーに対する ID は外部リンケージを持ちます。
  • オブジェクト
  • 関数

C 内の ID が extern キーワードを宣言されても、同じ ID を使 ったオブジェクトまたは関数の以前の宣言が可視になっている場合は、2 番目の ID は、最初の 宣言と同じリンケージを持ちます。 例えば、最初にキーワード static を宣言され、後で キーワード extern を宣言された変数または関数は内部リンケージを持ちます。 ただし、リンケージを持たずに、後で結合指定子を使用して宣言された変数または関数は、 明白に指定されたリンケージを持ちます。

C C のみの終わり。

C++ C++ のみの始まり。

ネーム・スペース・スコープでは、次にあげる種類のエンティティの ID は、外部結合を持っています。
  • 内部結合を持たない参照またはオブジェクト。
  • 内部結合を持たない関数。
  • 名前付きのクラスまたは列挙。
  • typedef 宣言で定義された名前なしクラスまたは列挙。
  • 外部結合を持っている列挙の列挙子。
  • 内部結合を持つ関数テンプレートでない場合のテンプレート。
  • 名前なしネーム・スペース内で宣言されていない場合のネーム・スペース。
クラスの ID が外部リンケージを持っている場合、そのクラスのインプリ メンテーションでは、以下に対する ID も外部リンケージを持ちます。
  • メンバー関数。
  • 静的データ・メンバー。
  • クラス・スコープのクラス。
  • クラス・スコープの列挙。

C++ C++ のみの終わり。