2016-10-07 3 views
1

私はwhile->の最初のreturnステートメント部分が発生した場合この関数では、whileループの後にreturn文を入れる必要がありますか?ループは依然として継続している間

int myfun(int *a, int *b) 
{ 
    while(some condition) 
    { 
     if(condition) return *a + *b; 
     else 
     { 
      some manipulation; 
     } 
    } 
    return -1; 
} 

のような機能は、コントロールがでmyfunを呼び出す関数に行かない持っているか?なぜリターンがある-1声明必要?

+0

実際のコードを入れてみると、この質問は不明です... –

+0

ループ内のreturn文がヒットしたら、関数myfunは直ちに終了します。最後の戻り値は、if文に決して到達しない場合です。この場合、 '* a + * b'は返されず、代わりに何かが返される必要があります。 – LambdaBeta

+1

"何らかの条件"が偽になったときに-1が返されます。多分、データがなくなったでしょう。エラーを示すため-1が通常使用されます。しかし、実際にはポインタのCでは不正な値です。 nullがエラーでない場合、関数はフラグを設定し、代替の無効なポインタを作成しようとはしません。 –

答えて

2

return *a+*bの後、関数はそれを返して終了します。その条件が決して満たされない場合、それは何を返すのでしょうか?return -1が必要ですか? int関数なので、何かを返す必要があります。

+0

技術的には、そのint *関数は '-1'を返します。恐ろしいですが、それはちょうど普通の 'int'関数であることを意図していることはかなり明らかです。 – LambdaBeta

+0

whileループで条件が少なくとも一度満たされても、コンパイラがreturn -1ステートメントをチェックするように注意したとします。 –

+0

はい、コンパイラはそれが常に真であることを知らないためです。 –

0

some_conditionが最初にフルフィルされないことがあるので、whileループは入力されないため、return -1ステートメントが必要です。

したがって、いくつかの戻り値を指定する必要があります(この場合は-1)。

1

some conditionが満たされない場合、コントロールはループに入ることはなく、関数が終了する次の行を実行することはありません。

この場合、戻り値の型がvoidではないため、この関数は値を返す必要があります。したがって、return -1

0

最初のreturn文は、条件が満たされた場合にのみ適用されます。条件が満たされた場合、return文は直ちに制御を呼び出し関数に戻しますが、なんらかの理由でifが満たされない場合、whileループのすべての反復が満たされ、最後に整数値戻り値の型は整数なので、やはりコントロールは呼び出し関数に戻ります。

0

関数のすべての終点(exit)はreturn文を持っていなければなりません(関数の宣言がofcourseのようなものであれば)。あなたが書いたコードはコンパイラによって処理されるでしょう。あなたの機能は、あなたの機能内の支店の基準を満たすことに依存します。

1

はい "if"ステートメントの条件が真である場合、関数はこの場合その時点で返されます。 return -1文は有用であり、実際にはif文が決して実行されなくても何かが返されるように注意する必要があります。関数がvoid myfuncとして宣言されていた場合は、エラーが発生しているはずです。

関連する問題