C または C での Goto の優れた使用法
goto は普遍的に有害であるという一般的な見解にもかかわらず、特定の状況では、使用すると明らかなメリットが得られます。
クリーンアップブロック
そのようなケースの 1 つはクリーンアップ ブロックの作成です。これは、エラーが発生した場合に適切なリソース割り当てを確実に解除するために C で一般的に使用されるパターンです。 goto を使用すると、次のようにクリーンアップ ブロックを実装できます。
void foo() { if (!doA()) goto exit; if (!doB()) goto cleanupA; if (!doC()) goto cleanupB; /* everything has succeeded */ return; cleanupB: undoB(); cleanupA: undoA(); exit: return; }
このコードにより、エラー状態を明確かつ効率的に処理できます。 doB() または doC() でエラーが発生した場合、適切なクリーンアップ関数が呼び出され、実行は終了ラベルに進み、関数から戻ります。
特定の無条件分岐
Goto は、特定の無条件分岐を実行するときにも有益です。たとえば、次のコードは goto を使用して無限ループをシミュレートします:
infinite_loop: // code goes here goto infinite_loop;
このアプローチは、ループを継続する意図を明確に示しているため、縮退条件で while ループを使用するよりも具体的で自己文書化されています。 .
注意
goto を使用しないことに注意することが重要です。無差別に使用されます。慎重に使用しないと、簡単にスパゲッティ コードにつながる可能性があります。ただし、適切に使用すると、効率的で読みやすいコードを作成するための貴重なツールとなります。
以上がC または C で `goto` を使用できるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。