K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>>最初期のCではexternはあってもなくても同じだったらしい >「最初期」をどのくらいまで遡るか次第、だけど >俺妄想だと Kerningham/Ritchie が作った直後のCには、たぶん >extern はまったく無かったのだろうと思う。 >なおかつリンカーが bss combine を勝手に行ってしまう都合上 >ODR は実装したくても実装するすべが無かった。 > >----aaa.c---- >static int i1; // internal linkage, definition >int i2; // external linkage, definition >----bbb.c---- >static int i1; // internal linkage, definition, another instance of aaa.c!i1 >double i2; // external linkage, definition, different decl of aaa.c!i2 >----bss in a.out--- >aaa.c!i1; >bbb.c!i1; >common!i2; // combined together, uses maximum size > >bss combine 機能が無いリンカーをもつ処理系に移植する際に困ったので >後付で extern を追加したが、そのときにはすでに extern を持たないCで書かれた >ソースコードがたくさんあったので、互換性を維持するには?と考えた結果が今の仕様 > >あと初期化子の有無で挙動が異なるのも、リンカーの都合 >(非0の)初期化子がある=bss に置けない=bss combine が効かない >って、これも妄想 > >歴史家なら、黒歴史を追及するのもまあお仕事ですし、実際面白そうだけど >1ユーザとしては今ある仕様を理解するほうが建設的かなーって思うのであった
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!