1

重複の可能性:
C または C++ での適切な goto の例

goto ステートメントのどのような使用法が受け入れられると思いますか? C 組み込み作業のコーディング ガイドラインについて話し合っていますが、goto が最もクリーンな方法である場合があるかどうか疑問に思っています。

4

3 に答える 3

1

C の場合、一部の関数で共通の出口点として goto を使用すると便利です。戻る前にリソースを解放する必要がある場合はretval = -ERROR; goto fn_exit;、for/while ループの複数のレイヤーから抜け出そうとするのではなく、そうすることをお勧めします。

うまく設計されたコードでは必要ないと主張する人もいます。場合によってはそうかもしれませんが、サブ関数がそれらの値を更新できるように、複数の変数を渡したり、変数へのポインターを渡したりする必要がある場合は、不要な複雑さを追加したように感じます。

これは、エラー管理に goto を使用することに関する最近の SO の質問です。goto タグを参照すると、さらに多くの回答が得られると確信しています。

于 2010-06-03T16:20:31.743 に答える
0

goto でロジックを単純化できる場所がかなりあることがわかりました。私のルールは、2 つの goto が互いに重複しないこと、および goto とそのラベルが「近い」ことです。通常、間隔は 30 行以内です。

通常、多くのことを確認しなければならない複雑な状況がある場合、goto が役立つことがあります。

if ( condition1 && cond2 )
  if ( checkFile( file ) )
    goto DONE;
else
  if ( condition3 )
    goto DONE;

handleError();
return 0;

DONE:
...do something...
return 1;
于 2010-06-03T16:20:40.933 に答える
-2

私の個人的な意見では、現代のプログラミング言語で goto ステートメントを使用することは認められていません。

故 Edsger W. Dijkstra による「GOTO ステートメントは有害であると見なされる」は、この問題をうまくカバーしています。その論文は、地球上のすべてのソフトウェア開発者が読む必要があります。

1970 年代後半の UT オースティン校の Don Good のグループによるジプシー言語には goto がなかったことは注目に値します。

Ichbiah らが Ada に goto のみを含めたことは注目に値します。これは、DoD が要件仕様で非常に多くの単語で明示的に要求したためです。Ichbiah と彼のチームが goto ターゲット ラベルの構文を意図的に醜いものにして、ラベルを目立たないようにして、goto の使用を思いとどまらせようとしたことを読んだことを覚えています。

于 2010-06-03T16:21:17.390 に答える