ホームページ >バックエンド開発 >C++ >C または C で `goto` を使用できるのはどのような場合ですか?

C または C で `goto` を使用できるのはどのような場合ですか?

DDD
DDDオリジナル
2024-12-15 03:46:14744ブラウズ

When is Using `goto` in C or C   Acceptable?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。