関数は,呼び出せば,動くように思いがちですが,どのような関数なのかを宣言せずに呼び出すのは,やや乱暴かもしれません。そこで,呼び出す前に関数の原型を示す宣言が用意されています。
■関数原型宣言(関数プロトタイプ宣言,Function Prototype Declaration)
返却値型 識別子(仮引数の型,...); 返却値型 識別子(仮引数の型 仮引数名,...);
ここで,識別子(仮引数の型,...)
部分が「3.2. 宣言子」で触れた「関数宣言子」です。プロトタイプが示された時点から,その関数の呼び出しは,すべて同じ関数であると認識されます。[C99, 6.9.1, 7] プロトタイプ宣言がない前に関数を呼び出すと,コンパイル時に warning が出ます。[C99, Annex I, 2]
例えば,
double f(char x, int y) { /* ... */ }
という関数の定義をせずに,関数 f
を呼び出すのであれば,プロトタイプ宣言を予め行います。
double f(char, int);
プロトタイプとは,返却値型と仮引数の型が何なのかを示したものなので,仮引数の識別子はあってもなくても同じです。