[1046] Re:externと「外部結合」
投稿者:774RR
2007/09/01 22:25:46
このコメントは yuya さんむけというわけではなくて、第三者読者様の参考分として
<結合の規則>
6.2.2 識別子の結合
オブジェクトの宣言の場合 (関数には適用されない)
・記憶域クラス指定なし=外部結合
・static 指定あり=内部結合
・extern 指定あり
「すでに宣言があって、その宣言で外部結合または内部結合が指定されている」
→その既存の宣言と同じ結合をもつ
「すでに宣言があって、その宣言で無結合が指定されている」または「宣言が無い」
→外部結合
</結合の規則>
<宣言>
・無結合の識別子の宣言が同一スコープ内に2つ以上あってはならない
</宣言>
ということは、外部結合の宣言が2つあってもよいということ。
6.9.2 の例
int i4; // 宣言、外部結合の仮定義
int i4; // 宣言、外部結合の仮定義
extern int i4; // 宣言、既出の結合を採用、この場合は外部結合
static int i5; // 宣言、内部結合の仮定義
extern int i5; // 宣言、既出の結合を採用、この場合は内部結合
6.9.2 に出てない例 (外部定義にならないのでわざと出していない)
extern int i6; // 宣言、既出の宣言が無いので外部結合、外部定義にならない
(*136) 脚注のとおり、識別子を使わなければ定義は無くてよい