2009-03-16 1 views
4

関数の最後にreturn文があるシグニチャにvoid戻り値を持つ関数/メソッドがあります。これの理由は何ですか?これは他の言語にも当てはまりますか?void C/C++ルーチンの最後にreturn文を追加するのは何ですか?

私が知っている限り、私は関数の終わり以外はどこでも終了したい場合はリターンを使用できます。

A Cの例:あなた自身を言及

void function(void) 
{ 
    int x = 1 + 2; 

    return; // what do we need this for, if at all? 
} 

答えて

23

ここは無意味です。しかし、私の推測では、この種のものは、閉じブレースにブレークポイントを置くことをサポートしていないIDEにブレークポイントを置くために使用でき、ブレークポイントをここに置くことによって、ウォッチウィンドウなどでいくつかの値をチェックすることができるということです。

+2

あなたはそこに良い点を持っています!しかし、私はそのようなことをするときに、デバッグを終えたらmake-debugger-happy leftoverコードをクリーンアップしなければならないと思います。 – hasen

+3

ブレークポイントには役に立ちません(試してみてください)。 void関数からの復帰によって生成された実際のコードはありません。すべてのキーワードがコードに転送されるわけではありません。 – Suma

+0

@Suma:あなたは正しいと言えるでしょう。だから、私はそれが私の元の投稿の推測であると言ったのです。 – Aamir

4

として、あなたは、最後の文の前に機能を終了する場合は、あなただけのreturn文を必要としています。与えられた例では、return文は何の目的も持ちません。

2

私は、関数がいくつかの値を返すために使用され、プログラマがおそらくそれがもう一度起こると思っていたと思います。

3

少なくともコンパイラにとっては無意味ですが、C++の多くのものと同じように文体的です。例:

int main() 
{ 
    DoSomething(); 
    return 0; 
} 

C++では、準拠しているコンパイラに関する限り、リターン0は全く無意味です。しかし、時には明示的であるために冗長で無意味な記述を入れることを好む人もいます。私はプログラマの無知にまでこれらの種類のものをチョークすることをためらうだろう。それはちょうど文体です、あなたがそれのように感じる場合、それを取り除くために自由に感じてください。

+0

それは害を及ぼさず、コンパイラはそれを最適化し、一部のプログラマは読みやすさを高めると正当に信じています。 – slim

+0

戻りコードを調べるコマンドラインに無意味ではありません。 –

+1

これはまだ無意味です。標準C++のmainでは、intを返すと宣言されていますが、return文で終わる必要はありません。リターンがない場合、0が仮定されます。これはすべて標準的なので、戻り値0は無意味ですが、ほとんどの人は明示的にそこに置くことを好みます。 –

3

C/C++では役に立たず、読みやすさが低下します。

これが必要な実際の言語の例は、アセンブラです。しかし、アセンブラではreturn文は言語の一部ではありません。代わりに、制御の戻りを引き起こす特別な命令(x86でret)を呼び出さなければなりません。あなたがそれをしない限り、執行はただ続行され、次に起こることは、要因、運、月位相が含まれているかどうかによって決まります。

+0

スタックからの値のプッシュとポップを適切に処理するために必要な他の言語に由来する可能性があることに私は同意します。 –

16

誰かが、文字通り「1回限りのリターン」コーディングガイドラインを必要としました。

+2

これは素晴らしいです! :-) –

+1

これが本当なら、私には驚かないだろう。 –

5

何も返さない場合でも、関数の最後にreturn文を必ず含めます。私の本来の理由は、私が明示的であったこと、機能がどこで終了したのかについてのあいまいさがなくなったこと、私はいつも「最後から歩いた」機能に悩まされていたことです。その後、それは単なる習慣であり、(私が望むならば)壊れにくい。

7

voidを返す関数については、void関数の「end off」が期待通りに戻るため、問題はありません。

しかし、将来のメンテナンスを支援するためにこれを行う人もいます。たとえば、関数の戻り値の型を後でintに変更することを決定した場合、その最終のreturn文を変更してint値を返すことを忘れると、コンパイラエラーが発生するはずです。 return文がまったく得られなかった場合、戻り値は定義されていません。古いコンパイラの多くはこれについて警告しませんでした(本当です - 私はそれを見ました!)。ほとんどの現代のコンパイラがこれらのことを警告するので、これは最近問題ではありません。

0
+1

はSwDevMan81に感謝します。これは、Sub/Functionを終了する他のVBの方法と関連して、Return Statementを参照するように見えます。 – dubnde

2

私は必要それあなたとは思わないが、あなたはそれが持つことができます。取り出してもう一度プログラムを実行してみてください。違いをどうぞ見てください。

+0

void関数の最後にreturn文があるかどうかにかかわらず、コンパイルされた結果はまったく同じです。 – FluorescentGreen5

関連する問題