複数のreturnステートメントについて言及されているいくつかのメモに出くわすまで、Cの関数は1つのreturnステートメントしかサポートしないという印象を受けました。私の質問は、これらの複数のreturnステートメントがどのように機能するかです。どんな助けでも適用されます。ありがとう!
6 に答える
実行される最初のreturn
ステートメントは関数を終了し、その値が使用されます。
ただし、明らかに複数の実行パスが存在する可能性があり、それらは異なる値を返す可能性があります。実際、非void関数では、すべての可能な実行パスが何かを返す必要があります。これを実現する最も簡単な方法は、明らかにreturn
関数の最後にステートメントを置くことです。
if(foo)
return 23;
else
return 42;
コードにreturnステートメントを1つだけ含めるには、いくつかの議論があります。それらのいずれかがあなたに当てはまる場合は、記事を読むことを検討してください。良い例は、常に何らかのクリーンアップを行う必要があるコードです。この場合、これが行われた後にのみ戻りたいと思うでしょう-したがって、戻り値の変数を設定し、goto
早く戻る必要がある場合は、関数の最後にあるクリーンアップと戻りのセクションにジャンプするために使用します。
それが出くわす最初のreturnステートメントは、それ以上の実行を停止し、呼び出し元の関数に制御を返します。関数で処理した後に複数の値にアクセスする場合は、構造体または配列を使用できます。これらのオブジェクトは関数から返すことができるため、更新された値を構造体/配列オブジェクト全体として取得できます。
どちらのリターンが最初にヒットされても、関数は終了し、制御は呼び出し元に戻されます。
例えば:
int foo(int x)
{
if(x == 0) return 0;
return 1;
}
この場合、x
が0
の場合、最初のリターンがヒットして0
返されます。他の番号が渡された場合、2番目のリターンがヒットされ1
て返されます。
こういう意味ですか?
int function(int input)
{
if (input == 1) return 1;
else return 0;
}
まあ、それらはreturnステートメントとして機能します。もちろん、関数内のコードパスごとに1つのreturnステートメントを使用することは意味があります。
他のロジックブロックにリターンがある場合は、関数に複数のリターンがあると考えられます。
しかし、次のようなものです。1を返します。2を返します。
それほど多くはありません。
規則は、非void関数の場合、returnステートメントを実行せずに関数の最後に到達することは不可能でなければならないということです。
関数を実行するときにreturnステートメントを押すと、関数内のどこにいても(forまたはif…内)関数を終了します。したがって、同じブランチに2つのreturnステートメントがある場合、最初のステートメントのみが考慮されます。