5

これが私のコードスニペットです:

float square_root(x)
float x;
{
 .......
}

int main(){
    printf("Square_root 2 = %f\n", square_root(4));
}

関数に数値4.0を渡すと、square_root()関数x内のパラメーターは4.0000000なので、問題ありません。しかし、(例のように)4だけを渡すとx、関数内の変数は1.976262583365e-323#DENになります。

なぜそれが起こるのですか?

4

2 に答える 2

17

引数の型が個別にリストされている古いスタイルの関数宣言を使用しています。C関数の構文、パラメーターリストの後に宣言されたパラメータータイプを参照してください。

を渡すため、デフォルトintでは変換されません。floatただし、関数は引数をとして解釈floatしているため、望ましくない結果が生じます。

最新のアプローチは、引数の型を関数宣言に含めることです。これにより、int引数を自動的にに変換できますfloat

float square_root(float x)
{
     .......
}
于 2012-10-26T15:17:57.643 に答える
6

非プロトタイプ関数を使用したデフォルトの引数プロモーションがあり、プロトタイプの場合のようにパラメーターのタイプへの変換はありません。したがって、基本的に、あなたintの価値は、に変換されるのではなく、4として解釈されます。floatfloat

代わりに、プロトタイプの定義を使用してください。

float square_root(float x)
{
 .......
}

関数呼び出しの引数をに変換しますfloat

また、古いスタイルの関数定義は廃止されたC機能であり、避ける必要があることにも注意してください。

于 2012-10-26T15:17:40.467 に答える