ドキュメント性のあるループ
よくある無限ループの書き方。
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
おおすげー、同じになってる。文字列が定数領域にも存在しない。なかなか優秀じゃないか。つまりこういう書き方もアリってことだ。