C言語なら俺に聞け(入門編)Part 60
■ このスレッドは過去ログ倉庫に格納されています
0433402
2010/02/13(土) 21:39:22実行時にも変数がNULLか判定させようとすると、判定に失敗してしまいます…
コンパイルオプションで強めの最適化(-O2)をしたときにだけ失敗します。
一体どうなっているんだろう?
ttp://ja.pastebin.ca/1795229
上記のソース(test.c)を
$ gcc -Wall -O2 test.c -o test
とコンパイルして実行すると、my_funcにNULLを渡していても-1を返さずエラーを検知できません。
mainが正常終了してしまいます。
一方、コンパイルする際に最適化オプションを"-O"にすると検知できました。
$ gcc -Wall -O test.c -o test
とコンパイルして実行すると、my_funcにNULLを渡すと-1を返します。
最適化オプションなしでも同じように検知できました。
コンパイルオプションでなぜ挙動が変わるんだろう… "-O2"の何がいけないのだろうか?
実用的には、弱い最適化オプション(-O)でコンパイルすれば済むんですが気になっています。
もう少し詳しい原因が分かる方いらっしゃれば教えて欲しい…
gcc-4.3.2とglibc-2.7を使っています。
■ このスレッドは過去ログ倉庫に格納されています