C言語なら俺に聞け(入門編)Part 113
■ このスレッドは過去ログ倉庫に格納されています
>複数の翻訳単位で定義されていれば、externの有無に関わらずエラーになる。
複数で「定義=宣言+初期化」ならばそのとおり、しかし私は >>315 の否定部分では複数で「宣言」までしか意図していない。文脈をすりかえないでほしい。
>externを理解して無いことが
extern はなくてもなんら困らないから理解する必要はない。
それはともかく、>>312がみえないのか?
---
【初心者お断り】ガチ規格準拠C専用スレ Part133
http://pc12.2ch.net/test/read.cgi/tech/1201153965/139
139 名前:デフォルトの名無しさん[sage] 投稿日:2008/04/23(水) 22:31:34
みんなあんまり適当な事言うなよ?
>>133
あまり知られていないが、これは 「仮定義(tentative definition)」 という仕様。
extern も static もついていない、初期化を伴わないグローバル変数の宣言は 「仮定義」 と見なされる。
対する、extern も static もついていない、初期化を伴うグローバル変数の宣言は 「外部定義(external definition)」 と見なされる。
外部定義は必ず実体定義を伴う。
外部定義が複数あると、二重定義となりエラーとなる。
しかし、仮定義は他に実体定義がなければ実体を定義し、
他に実体定義があれば実体定義を伴わない単なる宣言と見なされる。
複数の仮定義を書いた場合、実体は1つだけ定義され、それらの仮定義は実体を共有する。
つまり、>>133 は仕様。
■ このスレッドは過去ログ倉庫に格納されています