アカウント名:
パスワード:
よく日付が埋め込まれているDNSゾーンファイルのSerial値は、同じ32ビットですが符号なしなので倍いけるようです。2147483647案件を見るたびに、なんで符号入れておくんだろう?と思うんです。
そして大小比較に減算を使ってバグるまでがセット。
データ有効範囲を考えれば符号いらない!と思っても途中演算やらの都合でunsignedがバグにつながる事ってけっこうありますよね※もちろんバグらない方法もあるけど安易にコードを書くと(ry while (cnt-- >= 0) { // 処理 }
そのパターンだとそもそも無限ループになるか一回も実行されないかのどっちかでは。
C/C++の場合、もしループの中で副作用(volatile変数へのアクセスとか)がなかったら未定義動作になる。コンパイラーは、プログラムの実行はいつか終了するものと決めつけてコード生成していい。まあそうでなくては停止問題を解く羽目になりかねないから選択の余地はない
未定義なのはC++だけ。Cでは無限ループ書くのも、一定条件下でコンパイラが無限ループを消し飛ばすのも合法。
あ、Cだと制御式が定数式の無限ループは合法なのね。
> 一定条件下でコンパイラが無限ループを消し飛ばすのも合法。
これは
> may be assumed by the implementation to terminate.
のこと? 規格で"may be assumed"と書かれていたら、それは「仮定が満たされなかった場合動作は未定義である」という意味だよ。未定義なんだから無限ループを消し飛ばすのも合法ではあるが。
そこらへんの文言を入れた理由も書いてあるから、N1528を読め。それでもなおmay be assumed が書いてあるから未定義だと思うのなら、そう思った根拠付きでcommiteeに言ってやれ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike
符号、要ります? (スコア:0)
よく日付が埋め込まれているDNSゾーンファイルのSerial値は、同じ32ビットですが符号なしなので倍いけるようです。2147483647案件を見るたびに、なんで符号入れておくんだろう?と思うんです。
Re: (スコア:0)
そして大小比較に減算を使ってバグるまでがセット。
Re: (スコア:0)
データ有効範囲を考えれば符号いらない!と思っても途中演算やらの都合でunsignedがバグにつながる事ってけっこうありますよね
※もちろんバグらない方法もあるけど安易にコードを書くと(ry
while (cnt-- >= 0) {
// 処理
}
Re: (スコア:0)
そのパターンだとそもそも無限ループになるか一回も実行されないかのどっちかでは。
Re: (スコア:0)
C/C++の場合、もしループの中で副作用(volatile変数へのアクセスとか)がなかったら未定義動作になる。コンパイラーは、プログラムの実行はいつか終了するものと決めつけてコード生成していい。まあそうでなくては停止問題を解く羽目になりかねないから選択の余地はない
Re: (スコア:0)
未定義なのはC++だけ。
Cでは無限ループ書くのも、一定条件下でコンパイラが無限ループを消し飛ばすのも合法。
Re: (スコア:0)
あ、Cだと制御式が定数式の無限ループは合法なのね。
> 一定条件下でコンパイラが無限ループを消し飛ばすのも合法。
これは
> may be assumed by the implementation to terminate.
のこと? 規格で"may be assumed"と書かれていたら、それは「仮定が満たされなかった場合動作は未定義である」という意味だよ。未定義なんだから無限ループを消し飛ばすのも合法ではあるが。
Re:符号、要ります? (スコア:1)
そこらへんの文言を入れた理由も書いてあるから、N1528を読め。
それでもなおmay be assumed が書いてあるから未定義だと思うのなら、そう思った根拠付きでcommiteeに言ってやれ。