do … while () の意外な使い方

今年一番衝撃だったかもしれない(今のところ)。 C++ のソースを読んでいたら、こんなコードが出てきました。

do {
    コード
    コード
    ...

うーん、複雑な do ループだなー、とよくよく読んでみると、こんな構造になっていました。

do {
    コード
    コード
    if (条件) {
        break;
    }
    コード
    コード
    if (条件) {
        break;
    }
    コード
    コード
} while (0);
コード
コード

これはもしや、 do … while を使っていたのはループのためではなくて、ジャンプするためでは…!!
なるほどー、わかっていればごくごく当たり前のことだけど。 do … while(0) って goto 文的な使い方ができるのか。覚えておこう。
これってどうなんでしょうか。 goto 文ほどではないせよ、処理の流れが分かりづらくなるんじゃないだろうか。普通は do while で囲まれた部分は関数に、 break は return にするところですが、関数を作れない事情がなにかあったのかもしれない。(関数化するとしても、関数の途中で return を使うのもよくないという説もありますが)