do … while () の意外な使い方
今年一番の衝撃だったかもしれない(今のところ)。 C++ のソースを読んでいたら、こんなコードが出てきました。
do { コード コード ... |
うーん、複雑な do ループだなー、とよくよく読んでみると、こんな構造になっていました。
do { コード コード if (条件) { break; } コード コード if (条件) { break; } コード コード } while (0); コード コード |
これはもしや、 do … while を使っていたのはループのためではなくて、ジャンプするためでは…!!
なるほどー、わかっていればごくごく当たり前のことだけど。 do … while(0) って goto 文的な使い方ができるのか。覚えておこう。
これってどうなんでしょうか。 goto 文ほどではないせよ、処理の流れが分かりづらくなるんじゃないだろうか。普通は do while で囲まれた部分は関数に、 break は return にするところですが、関数を作れない事情がなにかあったのかもしれない。(関数化するとしても、関数の途中で return を使うのもよくないという説もありますが)