「while(0)」の使い道

※2/21 数発言追加

mikotox
whileとbreakを使ってみた給与計算ぷろぐらみゅ http://post.ly/JU
mikotox
試してみた。できたはず?
s_hiiragi
@mikotox 変わったwhileの無限ループ条件ですね。while(1)と書くだけでちゃんと無限ループしてくれますよ〜
mikotox [Re]
@s_hiiragi なんかwhile(0)は絶対書いちゃだめだよ!って言われて何か抵抗があった!すみません
cielo_ee
@mikotox あとwhile(0)がダメっていうのは絶対にループの中にいかなくなっちゃうからで、while(1)は適切にループを抜けるようにすれば使ってOK。いろいろうるさくて失礼。
s_hiiragi
@mikotox 0とか1とか数字は、while()の括弧の中では真偽値(簡単に言えば、YES or NO)に変換されます。0が偽(NO)で、それ以外が真(YES)です。なので、while(0)はいきなりループすることをNO!といってることになります。
mikotox [Re]
@cielo_ee while(0)と(1)はちがうのね。いろいろ認識とお勉強がたりなくてすみませぬ。
Misho
だれか while(0){ ほげほげ } な構文に意味を与えてあげて下さい。寂しそうにこちらを見ています!!!! in '09
Misho
だれか!!!誰か早く while(0) に利用価値を!!!!!! in '09
Misho
do { ... } while(0)ってそれ書かなくて良いじゃん in '09
chap_py
@Misho 実際問題利用価値はあって、ライントレース系のシステムはWhile(0)を使って無限ループを入れてる。敢えて無限ループを入れて、線が見つかった時点で電気的に回路を切断して、無限ループから抜け出してまた線を追うとか言うシステムの組みかたをしていると聞いた事がある
Misho [Re]
@chap_py 完結に5文字以内でお願いします。 in '09
kanasan
@Misho 途中にbreakで処理抜け可能。
Misho [Re]
@chap_py って先生それ多分while(1)です in '09
tackman [Re]
@Misho コメントアウトの代わりに使ってみるとか。
harukasan
ん、do { ... } while(0) ってただスコープ変えたいだけじゃないの?
chap_py
@Misho 無 理 ポ ! !
chap_py
@Misho ホントだwwwwwwwww
ka_
いやマジで while(0) なんてどうやって使うんだべ [EeePC901]
Misho
あの@kanasanまでもがwhile(1)と見間違えるなんて……while(0)……恐ろしい娘……。。。。 in '09
Misho [Re]
@harukasan お!スコープが変わるのですか!? in '09
kanasan
@Misho do {...if(...){break;}...if(...){break;}...} while(0)
ka_
スコープ変えたいだけなら { ... } でイナフ (ノω<) [EeePC901]
Misho [Re]
@tackman 確かにそういわれてみれば!!! 間に * とか / とかいっぱいあるとき便利ですね!!! in '09
Misho [Re]
@kanasan おおおおおおおおおおおおおおおおおおおおおおおおお in '09
Misho
すげえええええええええええええええええええええええ in '09
Misho
横浜市から神が降臨した in '09
kanasan
@Misho while(0)ですぜ。
ka_
/* */ の入れ子を無視した一括コメントアウトなら #if 0 ... #endif でイナフだしねぇ〜 (´ω`) [EeePC901] .
Misho
感動して言葉が出ない in '09
harukasan
@Misho んー、これとかですね。 http://tinyurl.com/blbl2z
kanasan
@Misho while(0){}なら利用価値なしと思いきや、実は利用価値あり。下手にコメントアウトした処理がコンパイル通らない処理に書き変えてしまわないように、while(0){...}でコメントアウトのかわり。
Misho [Re]
@ka_ #if 0 ... #endif を入れ子にしたくなったらどうしましょう in '09
Misho
かなさんがすごすgるう in '09
harukasan
マクロに使うかコメントアウトくらいかなー。使い道。
kanasan
while(0){}内はコンパイル処理されるけど、実行されない。jsでもsyntaxのチェックぐらいは可能。
ka_ [Re]
@Misho そう言われると弱い (^^; [EeePC901]

Misho
【結論】寂しそうにしていたwhile(0)に,3つも利用価値を見いだすことが出来ました!!!さすがTwitterです!! in '09
Misho
(1) do{ } while(0); の途中に break; を配置して,途中で離脱できるブロックを組み立てる。 in '09
Misho
(2) *や/が多い文章も安心!!無限入れ子構造的コメントアウト!!! in '09
Misho
(3) while(0){ }で囲った文章は実行されないけどコンパイルされるので,コメントアウトされたコードの文法的正しさを維持できる!! in '09

ka_
でも while(0) { ... } de [EeePC901]
hatsune_
@Misho do { } while(0)だったら{ }の中は1回しか通らないけどいいの? do { } until(0)とか do { } while(1)じゃなくて? *imoTwit
Misho [Re]
@hatsune_ どうやら goto の代わりに使うみたいです。 in '09
ka_
でも while (0) { ... } でコメントアウト出来る範囲は同一スコープ限定なのがネック? [EeePC901]
hatsune_
@Misho do {}構造にしておいてbreak文で}の後ろにブレイクか! *imoTwit
harukasan
@Misho あと #define MACRO do { ... } while(0) ってマクロで使ったりしますよっ。
Misho
@mikotox Twitterのとても偉い人たちに尋ねた結果,全く使い道の無さそうなwhile(0)にも,3つもの利用法があることがわかりました!!!プロになったら使っても良いみたい!!! in '09
Misho [Re]
@hatsune_ そうです!!何という鬼畜攻め!!!!!! in '09
Misho [Re]
@harukasan お?それはスコープを限定するという意味ですか?それとも,ブロックにしないと #define できないのだっけ in '09
harukasan
@Misho さっきも貼ったのですが http://tinyurl.com/blbl2z
Misho
@harukasan これは!!!!!!!!! in '09
Misho
というかこのwhile(0)によるブロック化はhackすぎるだろ…… in '09
kanasan
@Misho breakなしのswitchとは逆用途。
harukasan
基本的にwhile(0)使うのはバッドノウハウっぽいよね。
harukasan
Spotlightでwhile(0)検索してみたら何カ所か使ってた。