Shammer's Philosophy

My private adversaria

関数プロトタイプ

関数プロトタイプとは、Cのソースコード上で使用している外部ファイルの関数のシグネチャを定義しておくもの。
Javaだとシグネチャといえば通じるはずだがCでは何というのか・・・(って関数プロトタイプというのだが)。
外部ファイルをincludeしたり、独自の関数を使用する場合に宣言しておくもののようだ。
が、、、正直よくわからない。シグネチャが一致しない関数を呼び出せばコンパイルエラーになるのが普通と思ってしまうがそうではなかった、ということなのだろうか。
試しにちょっとやってみた。


 int main()
 {
  int x = 100;
  int y = 200;
  test_print(x,y);
  return 0;
 }


 void test_print(int x, int y)
 {
  printf("%d\n", x);
  printf("%d\n", y);
 }


この場合、test_printという関数は独自関数なのでソースコードの最初の方で


 void test_print(int, int);


と書いておくのが正しいことになる。
これを書いていないと、この test_print という関数は int test_print(int, int) というように
解釈されて構文エラーになるようだが、、、コンパイルは通った。(警告は出たけれど・・・)
実行結果も問題なく見えるので謎・・・
もっとたくさんの関数があるような状況じゃないと効果がわからないのかもしれない。
なんか腑に落ちないが・・・保留。