てがみ: qatacri at protonmail.com | 統計 | 2022

202201900

goto が便利な場合の一つに、下のようなコードがある。

    initialize_a();
    if (error) goto exit_a;
    initialize_b();
    if (error) goto exit_b;
    initialize_c();
    if (error) goto exit_c;

    do_something();

exit_c:
    terminate_c();
exit_b:
    terminate_b();
exit_a:
    terminate_a();

実際に Pure C ではけっこう見かける。モダンな言語では RAII とか try-finally を使うのが正しいアプローチだけれど、状況によってはこういう形で書きたくなることがある。まあこれって普通に reducible なフローなので、 goto ならではの用法かといわれると微妙ではある。