C言語なら、俺に聞け! <27>
■ このスレッドは過去ログ倉庫に格納されています
0566デフォルトの名無しさん
NGNGCマガ見たけど、これ恐らくgccだからだよ。
つまり実装依存。本文にはC++では多重定義エラーに
なるが、Cではエラーにならんと書いてあるけど、
Cの規格ではエラーだよ。というのはね、外部リンケージ
を持つ外部変数の記憶割り当てには幾つかのモデルがあって、
Unix系統のものは、それ独自のモデルを採用している。
詳しくは、C Rationalの3.1.2.2に書いてある。
http://www.lysator.liu.se/c/rat/c1.html#3-1-2-4
なので、例えば以下のように、初期値がなくても各ファイル
のfooは定義であり、宣言ではない。-->リンクエラー
file1.c int foo;
file2.c int foo;
これはK&R Second Editionの付録を読めばリンクエラー
になることが理解できる。邦訳版 A10.2
■ このスレッドは過去ログ倉庫に格納されています