K.Maebashi's BBS

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

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

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

[1048] Re:externと「外部結合」
投稿者:774RR
2007/09/01 23:18:11

ながながと書いたけど結局のところ yuya さんの疑問点は extern 記憶域指定子はなぜに (6.2.2) のようなヘンな振る舞いをするのか、その根拠やいかに ということでよろしいのだろうか? 根拠 (Rationale) は規格書採択の際の委員会議事録などをさがせば出てくるんだろう。 でも俺は規格策定委員でもなんでもないただの1ユーザなのですだ。 そういう議事録みたいなのが公開されていれば誰か探してみてほしい。 まずは検証可能な事実を指摘: この「結合」の振る舞いは JIS X3010:1993 (ISO/IEC 9899:1990) の時点から ほとんど変わっていない。(一部些細な変更があるが今の議論には関係ないところ) 言語規格書ってのは、理想を追求するあまりに今あるユーザー・処理系を無視する わけにはいかない代物なわけだ。 したがって当時1990年頃に書かれていた「一般的なソースコードがすべて不適合」に なるような文言てのは採用するわけには行かない。理想と現実の落としどころが重要になる。 以下は俺の妄想: ヘッダファイルを多重に #include していて include-guard がうまく効いていない、 あるいは、同一大域変数の宣言を複数の別ヘッダファイルが行っている、 そんなソースコードでできたプログラムがあるとして。 #include の結果として、 翻訳単位中に extern の無い大域変数宣言 (要するに外部定義) が先に現れ、 後から extern のある大域変数宣言 (いわゆる変数宣言) が現れる、ような場合であっても うまいことコンパイル&リンクができるようにする必要があった。 すなわち extern 記憶域指定子の振る舞いは JIS X3010:1993 なら 6.1.2.2 JIS X3010:2003 なら 6.2.2 のように定めると都合がよかった。 そーいう話だと思って勝手にコメントしてみたけど、 いや、ずれてる!ということならまたよろしく。
[この投稿を含むスレッドを表示] [この投稿を削除]