アカウント名:
パスワード:
その結果定数メモリへの書き込みが発生するのがバグ
組み込みやってるとconst領域はROMに確保されるのが当たり前だったのでconst付シンボルの中身を書き換えてるソース見て何だこりゃ?って思ったっけ。(そのソースをそのまま組み込み機に移植したら動かなくなったのを思い出した)
#それを相性問題で片づけたのはうちの上司#(Windowsプログラマ部隊より立場弱くて、更に「実績のあるソースだからそのまま使え」の通達付きだった)
ポインタ経由すればconst付きで宣言した変数の書換だってできますからね。まあROMに書き込見たいときとか値を固定したいときはdefine使えと。
> ポインタ経由すればconst付きで宣言した変数の書換だってできますからね。
それ処理系依存GCC とかだと最適化のオプション次第ですけど普通に使ってれば SegFault です。
処理系依存ではない。書き換えは未定義動作。「any attempt to modify a const object during its lifetime (3.8) results in undefined behavior.」
未定義動作は処理系がどのように実装しても構わないのだから、処理系依存で間違ってないと思うが。
処理系が実装しなくてもいいので未定義なのです。普通実装しちゃうんだけど。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy
キャストでconstを外すのがバグではなく (スコア:1)
その結果定数メモリへの書き込みが発生するのがバグ
Re: (スコア:1)
組み込みやってるとconst領域はROMに確保されるのが当たり前だったのでconst付シンボルの中身を書き換えてるソース見て何だこりゃ?って思ったっけ。
(そのソースをそのまま組み込み機に移植したら動かなくなったのを思い出した)
#それを相性問題で片づけたのはうちの上司
#(Windowsプログラマ部隊より立場弱くて、更に「実績のあるソースだからそのまま使え」の通達付きだった)
Re: (スコア:0)
ポインタ経由すればconst付きで宣言した変数の書換だってできますからね。
まあROMに書き込見たいときとか値を固定したいときはdefine使えと。
Re: (スコア:0)
> ポインタ経由すればconst付きで宣言した変数の書換だってできますからね。
それ処理系依存
GCC とかだと最適化のオプション次第ですけど普通に使ってれば SegFault です。
Re: (スコア:0)
処理系依存ではない。書き換えは未定義動作。「any attempt to modify a const object during its lifetime (3.8) results in undefined behavior.」
Re: (スコア:0)
未定義動作は処理系がどのように実装しても構わないのだから、処理系依存で間違ってないと思うが。
Re:キャストでconstを外すのがバグではなく (スコア:0)
処理系が実装しなくてもいいので未定義なのです。
普通実装しちゃうんだけど。