無限ループを while ( true ) と書いたらいけない理由がわかりません。

解決


みりん  2009-03-24 16:49:10  No: 69863  IP: [192.*.*.*]

バグを減らすために
無限ループは while ( true ) とかかずに for ( ; ; ) と書くようにと、
最近よく言われるのですが、
なんで while ( true ) と書いてはいけないのかさっぱりわかりません。
どなたか教えていただけませんでしょうか?

編集 削除
επιστημη  URL  2009-03-24 17:04:47  No: 69864  IP: [192.*.*.*]

> 無限ループは while ( true ) とかかずに for ( ; ; ) と書くようにと、
> 最近よく言われるのですが、

誰から? 
「なんで for(;;) だとバグが減るの?」って訊かなかったんですか?

> なんで while ( true ) と書いてはいけないのかさっぱりわかりません。

僕にもわかりません。どっちも同じだと思います。

編集 削除
みりん  2009-03-24 17:14:00  No: 69865  IP: [192.*.*.*]

ご回答ありがとうございます。

>誰から? 
>「なんで for(;;) だとバグが減るの?」って訊かなかったんですか?
上司から言われているのですが、
なんか有名なコーディング規約があって、
それにそう書いてあるらしいからみたいなことを言っていました。
( 上司はどこかで小耳にはさんだらしいです )

自分でも google などで検索してみましたが、
明確な理由を見つけ出すことができませんでした。

編集 削除
επιστημη  URL  2009-03-24 17:30:48  No: 69866  IP: [192.*.*.*]

> なんか有名なコーディング規約があって、
> それにそう書いてあるらしいからみたいなことを言っていました。

MISRAかしら? MISRAにそんなルールはなかったはずだけど。
※ ウラ取ってください。是非。 
※ 小耳に挟んだ程度の情報を鵜呑みにするのは危険です。ハジかきます。

「TRUEと==比較するな」てーのはあるけどね。
こいつを拡大解釈したんかな?

編集 削除
みりん  2009-03-24 17:53:20  No: 69867  IP: [192.*.*.*]

どうもこういうことらしいです。

1) コーディング規約の話になる
2) こんな規約、あんな規約があるらしいという話になる
3) コンパイラの警告が出ないようにしようということになる
4) VC++2005 だと while ( true ) で警告がでる
5) なので while ( true ) を for ( ; ; ) で置き換えようということになる


コンパイラの警告 (レベル 4) C4127
http://msdn.microsoft.com/ja-jp/library/6t66728h.aspx

編集 削除
επιστημη  URL  2009-03-24 19:59:27  No: 69868  IP: [192.*.*.*]

なるほどー。
while ( true ) での警告が出ない程度に warning-lebel を
緩くすると他の警告も出なくなるから使うな、と。

編集 削除
みりん  2009-03-25 10:38:52  No: 69869  IP: [192.*.*.*]

解決とさせていただきます。
επιστημηさん、お騒がせ致しました。

編集 削除