人々は未定義動作に多くを期待しがちではという気持ちがあるので書きます. まず「これこれは未定義動作です」と言ったとき,目に見えるやばいこと*1が発生するとは限らないです.「なんかうまくいく」とか「必ず実行時エラーになる」とかは保証されていません. 「未定義動作が起きます」という文より,「こういうコードを書いた場合の動作は定義されていません」という文の方が実態に即している気がします. 気づきにくい要因として,コンパイラが以下のような動作をすることが仕様で許されているというのがあります. 未定義動作は起こらないと仮定してよい 起こらないのだから,無視して最適化してよい 無視して最適化された結果として「なんかいい感じに動く」ということはありますが,当然常にうまくいくわけではありません. 甘えるのはやめましょう. ある環境でたまたま動いたコードが別の環境で動かなかったときに「環境依存のコード」と言