K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[1049] Re:externと「外部結合」
投稿者:(ぱ)こと管理人
2007/09/02 00:26:07

えー、一応管理人としては何か言うべきところなんでしょうが、正直、 私にはわかりません。 >6.9.2 外部オブジェクト定義 例1(抜粋) > >static int i2 = 2; // 定義,内部結合 > int i2 ; // 前に内部結合をもつ定義があるため、 > // 結合の不一致が生じ、6.2.2によって > // 動作は未定義となる >extern int i2 ; // 内部結合をもつ前の定義を参照する この「extern int i2;」の挙動が不可解だということですよね。 私にも不可解に見えます。そもそもキーワードの名前が「extern(al)」なのに! Rationaleを見ても、このへんに関する記述は以下の箇所くらいのようです。 http://www.lysator.liu.se/c/rat/c1.html#3-1-2-2 これはこれで興味深いのですが(最初期のCではexternはあってもなくても同じだった らしい)、yuyaさんの疑問の回答にはならないように思います。 Relaxed Ref/Defモデルのところには、 | The appearance of the keyword extern (whether it is used outside of the | scope of a function or not) in a declaration indicates a pure reference | (ref), which does not define storage. (超訳) >externはどっかの定義の参照を意味し、記憶領域の定義ではない。 とあるので、そのモデル(UNIX Cのモデル)を引き継ぐとそういう考え方になるのかなあ、 と思いましたが… UNIX Cにおいてexternが内部結合の定義を参照するような 実装があったのでしょうか。 externは定義にはならない、と考えると extern int i3 = 3; これも不可解ですが、これはcommonモデルの方を引き継いだのでしょうかね。
[この投稿を含むスレッドを表示] [この投稿を削除]