引数を一切とらないのであれば,
double f(void);
のように,仮引数の型に void
を指定したプロトタイプ宣言を行います。[C99, 6.7.5.3, 10]
これに対し,仮引数の型を全く指定しない宣言
double f();
は「引数をとらない」という意味にはなりません。これは,引数の型が不明という意味になります。このような場合に関数呼出しをすると,不明な箇所に代入された変数のすべてに整数拡張が施され,浮動小数点型の引数は double
型に変換されます。この暗黙の型変換を規定の実引数拡張(Default Argument Promotions)と言います。[C99, 6.5.2.2, 6] 関数の定義は,この型変換に符合させる必要があります。
double f(int x, int y) { // 処理 }