[220] Re:C言語ポインタ完全制覇についての質問
投稿者:九龍
2007/02/20 02:13:25
> 例えば、externする側をa.c、ローカルextern用のpiyo()を定義したものをb.c、
仰っている意味が分かりました。
ローカルextern用のpiyo()は、a.cのローカルextern用の関数定義って事だったんですね。
> 例えば、externする側をa.c、ローカルextern用のpiyo()を定義したものをb.c、
> グローバルextern用のpiyo()を定義したものをc.cしたとして、
> どちらのpiyo()をローカルへリンクして、もう一方をグローバルでリンクすれば良いのか、
> コンパイラこれを判断するにはどうすることが良いのでしょうか?
> b.c、c.cの関数定義はいずれにせよグローバルにおかれるでしょうし、
> コンパイラもそれを想定していると考えるなら衝突することになるのかな、なんて思いました。
> 名前空間があれば解決できるのでしょうが、Cは空間分けがザックリすぎて(^-^;)
> それができないですよね。
774RRさんも、
> C の場合は名前空間わけがざっくりすぎるし、オーバーロードは無いので、
> 結局同一名称の関数は1つしか存在し得ないわけです。では
と仰っているので、C++の名前空間的な機能が無い限り衝突はされられないので、それはできないという結論になると思います(少なくても私の知っている限りでは)。
ローカルのextern宣言の意味については774RRさんの仰っている通りです。
一応念の為に書いておきますが、b.cのpiyoをa.cのhoge1専用の作業関数としたい場合にはstaticを付けて、翻訳単位を分けるという方法しかないと思います。