[1045] Re:externと「外部結合」
投稿者:774RR
2007/09/01 22:03:00
なんか難しく考えすぎなのではないかと思ってきた・・・
言語規格書は書いてあるとおりに読めばよくて、勝手に行間を解釈しては誤るよ。
<[外部定義かそうでないか]の解釈>
JISX3010:2003 6.9.2 外部オブジェクト定義、で述べられている内容は要約すると
・オブジェクトの外部定義=ファイル有効範囲と初期化子をもつ場合
・初期化子がなく、記憶域クラスなしか static があるとき=仮定義
・仮定義が1つ以上あって外部定義が無い場合は、翻訳単位の終了時点で
仮定義を =0 という初期化子を持つ外部定義と読み替える。
以上。
よってここに書いてないものは外部定義ではないっつーことだ。
記憶域クラス指定 extern をもつ宣言についてはここ 6.9.2 では記載が無いので、
外部オブジェクト定義ではない。
> 私は定義ではなく、ただの宣言である。
ここまでは正しい。というか「外部定義にならない宣言である」というべきかな。
> 定義はほかにある
そんな勝手な行間を読んではいけない。これに関しては別に規定がきっちりある。
6.9 外部定義、において
・外部結合で宣言した識別子を使用している場合、プログラム全体の中でその識別子に
対する外部定義がちょうど1つなければならない。
・使用していない場合、1つ以下でなければならない (*136)
(*136) 外部結合で宣言した識別子を使用しない場合、その外部定義は必要ない
</[外部定義かそうでないか]の解釈>