K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>えー、一応管理人としては何か言うべきところなんでしょうが、正直、 >私にはわかりません。 > >>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モデルの方を引き継いだのでしょうかね。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!