g++ -fstrict-aliasing
http://gcc.gnu.org/onlinedocs/gcc-4.0.3/gcc/optimize-options.html#index-fstrict_002daliasing-511
int i = 10; float f = *( (int*)&i );
は移植性が低いだけでなく、GCC4の最適化
- O2
- O1 -fstrict-aliasing -fschedule-insns
によって意味が変わる。
訂正版
union int_float { int as_int; float as_float; } int_float x; int i = 10; x.as_int = i; float f = x.as_float;
g++ 4.x はデフォルトでこの問題を起こす最適化が有効になっている。
g++ 4.0.3 はそれにもかかわらず、警告を出さない。
対処:
1) g++3 を使う
2) g++ 4.1 以降でコンパイルして問題箇所を見つけ、修正する