歴史的背景:ダイクストラは、構造化プログラミング(、、、など)の代わりに多くのプログラマーが使用した1968年にGotoThoughdHarmfulを書いたことを覚えておく必要があります。  gotoifwhilefor
それは44年後のことであり、このような使用法が実際に見られることはめったにありませんgoto。構造化プログラミングは、ずっと前にすでに勝っています。
ケース分析:
サンプルコードは次のようになります。
    SETUP...
again:
    COMPUTE SOME VALUES...
    if (cmpxchg64(ptr, old_val, val) != old_val)
        goto again;
構造化バージョンは次のようになります。
SETUP...
do {
    COMPUTE SOME VALUES...
} while (cmpxchg64(ptr, old_val, val) != old_val);
構造化されたバージョンを見ると、すぐに「ループだ」と思います。バージョンを見るとgoto、最後に「再試行」のケースが付いた直線だと思います。
このgotoバージョンには両方がSETUPありCOMPUTE SOME VALUES、同じ列にあります。これは、ほとんどの場合、制御フローが両方を通過することを強調しています。構造化バージョンはSETUP、COMPUTE SOME VALUES異なる列に配置します。これは、制御が異なる列を通過する可能性があることを強調しています。
ここでの問題は、コードにどのような重点を置きたいかということです。gotoこれをエラー処理と比較できます。
構造化バージョン:
if (do_something() != ERR) {
    if (do_something2() != ERR) {
        if (do_something3() != ERR) {
            if (do_something4() != ERR) {
                ...
後藤バージョン:
if (do_something() == ERR)  // Straight line
    goto error;             // |
if (do_something2() == ERR) // |
    goto error;             // |
if (do_something3() == ERR) // |
    goto error;             // V
if (do_something4() == ERR) // emphasizes normal control flow
    goto error;
生成されるコードは基本的に同じであるため、インデントのような活版印刷の問題と考えることができます。