K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>九龍さん、はじめまして。 > > 3つに別けたのはa.cのコードが以下のような状況を想定しているように思えたからです。 > >---a.c--- >void hoge1(void) { > extern void piyo(int a); // b.c内を想定 > piyo(1); >} > >void hoge2(void) { > piyo(2); // c.cを想定 >} > > > なので、↓こういう状況を考えたわけです。 > >---b.c--- >// hoge1()ではAさんがくれたこっちを使おうと思った >void piyo(int a) { > return; >} > >---c.c--- >// hoge2()ではBさんがくれたこっちを使おうと思った >int piyo(int a) { > return a; >} > > この状態でb.c内にあるpiyo()をhoge1()ローカルだけに対して定義できるかというとできないですよね。 >従って、hoge1()でローカルexternしたpiyo()はどこにあるのかというと、 >コンパイラは「外部にある関数はグローバルに存在すると想定する」としかないのかな、と思います。 > >そうなると、 > 「hoge1()でローカルexternされてるpiyo()はグローバルにあるはず」 > 「hoge2()のpiyo()はプロトタイプ宣言ないけどこれも多分グローバルにあるはず」 >になるので、a.cのコンパイル時に正しいpiyo()をリンクするための情報を作るには >「正しいpiyo()はどれですか?」と整合エラーを吐くしかないような気がしました。 > > 名前空間があれば解決できるのでしょうが、Cは空間分けがザックリすぎて(^-^;) >それができないですよね。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!