/ / C-制御が非void関数の終わりに到達しました[-Wreturn-type] -c

C - コントロールは非void関数の終わりに達する[-Wreturn-type] - c

私はこれを持っています、そして私がコンパイルしようとすると、ターミナルは私にエラーを与えます。誰かが私を助けることができますか?

int e=0;

float func(float x, float y, float z)
{
e++;
if((x*x)+(y*y)+(z*z)<=4)
return 2.0;
}

回答:

回答№1の場合は3

どうしたら良い func もしも (x*x)+(y*y)+(z*z)<=4 本当じゃないの? あなたはそのケースを定義していませんが、関数にはその後何もありません。制御の流れ(つまり、実行パス)は、何も返さずに関数の最後に到達しましたが、何か 〜すべき 関数がvoidでないため、返されます。したがって、「制御は非void関数の終わりに到達します」。


回答№2については2

関数は、次の場合にのみ値(2.0)を返すため、常に値を返すとは限りません。 if () テストは本当です。インデントを使用すると役立ちます。


回答№3の場合は1

これは、 return ステートメントは、 if() ブロック。

ステートメントがtrueの場合、関数は 2.0、およびfalseの場合、値を返さずに関数の最後に到達します。


回答№4の場合は1

あなたのコード

int e=0;

float func(float x, float y, float z)
{
e++;
if((x*x)+(y*y)+(z*z)<=4)
return 2.0;
}

インデントを使用した場合は

int e=0;

float func(float x, float y, float z)
{
e++;
if ((x*x)+(y*y)+(z*z)<=4)
return 2.0;
}

中かっこを使用した場合は

int e=0;

float func(float x, float y, float z)
{
e++;
if((x*x)+(y*y)+(z*z)<=4)
{
return 2.0;
}
}

これは、パスが値を返さないことは自明です。

しかしまた声明

if((x*x)+(y*y)+(z*z)<=4)

それをより読みやすくするために片付けをすることができます

おそらく

if (((x*x) + (y*y) + (z*z)) <= 4)