関数宣言が存在していて、宣言された引き数型が含まれている場合、
コンパイラーは、型検査を行います。
関数を呼び出したとき、またはプロトタイプ引き数リストの可変部の引き数として式が使用されているときに、関数宣言を参照
できないと、コンパイラーはデフォルトの引き数拡張を実行したり、式の値を変換してから、引き
数を関数に渡します。
自動型変換の構成は次のとおりです。
GNU C セマンティクスを許可するコンパイラー・オプションを使用してコンパイル
すると、関数プロトタイプによって以降の K&R の非プロトタイプ定義が上書きされることがあります。この振る舞い
は ISO C では正しくありません。ISO C では、自動型変換のあと、
関数の引き数型は関数のプロトタイプの型と一致している必要があります。
int func(char); /* Legal in GCC, illegal in ISO C */ int func(ch) /* ch is automatically promoted to int, */ char ch; /* which does not match the prototype argument type char */ { return ch == 0;} int func(float); /* Legal in GCC, illegal in ISO C */ int func(ch) /* ch is automatically promoted to double, */ float ch; /* which does not match the prototype argument type float */ { return ch == 0;}
C++ での関数宣言は、常にパラメーター型を指定する必要があります。
また、関数は、まだ宣言されていない場合には、呼び出されない場合もあります。
関連参照