(ぱ)さん、はじめまして。
丁寧なご解答ありがとうございます。
>そうです…と答えると一言で終わってしまうわけですが、何か疑問があるので
>質問されたのだと思います。そこをもう少し明確にしていただけると、何か回答
>できるかもしれません。
>たとえばfloat 4バイト、double 8バイトの処理系を仮定したとして、fは実は
>doubleなので 8バイトです。その領域をfloat *で読めるはずはないわけです。
するどいですね。実は私が最初に思ったのが、どうせ仮引数でdoubleしか渡せないのなら、void sub_funcの関数宣言でのfloatへのポインタの仮引数宣言は、doubleへのポインタに読み替えられているのではないかという勝手な勘違いです。
それでちょっと心配になったのでご質問させて頂きました。
後、externとリンケージについての解答もありがとうございます。
>・どこかで定義されている関数を使う場合、プロトタイプ宣言を行うが、
> これにはexternをつけても付けなくても良い(で、たぶん普通はつけない)
昔、プロトタイプ宣言にexternをつけていたプログラムがあったので、一時期付けていた記憶があります。
話はちょっと脱線しますが、
http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide82-1.htmlにある解説、表はちょっと分かりずらいと思うのですが…。
例えば、別のモジュールで定義宣言されている関数を、他のモジュールの関数ブロック内でextern void f (void)とすると(普通はこんなことしませんが)、その関数ブロック内だけでその関数への参照が可能だと思っていたのですが、それより下の関数定義ブロック内でも参照可能となっていました(VC++ 6.0で確認)。
変数の場合であれば、その関数ブロック内のみ有効な筈ですが…。
うーん、ややっこしい。
ちょっと長くなりそうなので、この辺でやめておきます。
これからもちょくちょく寄らせて頂きますので、宜しくお願い致します。