ドキュメント性のあるループ

よくある無限ループの書き方。

void a() {
    while (true) {
        // ここでアロケートとかすると素敵なことが起きるよ
    };
}

コメントを入れずに、こうやっても同じ実行結果、同じようなドキュメント性が得られる。C言語を少しでも知っていれば、ループが回る理屈も理解できよう。

void b() {
    while ("これは無限ループです。中でアロケートとかすると面白いよ") {
    };
}

ただ、実際にこれをやった場合、文字列が実際どう扱われるのかが気になるので、この二つをひとつのソースファイルに書いてコンパイルしてみた。コンパイラGCC 4.0.1 PowerPC版、最適化オプション無し。

結果

    .section __TEXT,__text,regular,pure_instructions
    .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
    .machine ppc
    .text
    .align 2
    .globl __Z1av
__Z1av:
LFB2:
    stmw r30,-8(r1)
LCFI0:
    stwu r1,-48(r1)
LCFI1:
    mr r30,r1
LCFI2:
L2:
    b L2
LFE2:
    .align 2
    .globl __Z1bv
__Z1bv:
LFB3:
    stmw r30,-8(r1)
LCFI3:
    stwu r1,-48(r1)
LCFI4:
    mr r30,r1
LCFI5:
L5:
    b L5
LFE3:
    .globl __Z1av.eh
__Z1av.eh = 0
.no_dead_strip __Z1av.eh
    .globl __Z1bv.eh
__Z1bv.eh = 0
.no_dead_strip __Z1bv.eh
    .constructor
    .destructor
    .align 1
    .subsections_via_symbols

おおすげー、同じになってる。文字列が定数領域にも存在しない。なかなか優秀じゃないか。つまりこういう書き方もアリってことだ。