- ベストアンサー
GNUコンパイラとIntelコンパイラの違いについて
今回fortranとC言語で書かれたWindows用プログラムをLinux用に移植することになりました。GNUのコンパイラを使用し無事コンパイルできたので実行したのですが"Segmentation fault"となりうまく実行できませんでした。そこで試しにIntelのコンパイラを使用しコンパイルしてみたところGNUのときとは違い"Segmentation fault"とは出ず、プログラム内のエラーチェックに引っかかり止ってしまいました。同じソースコードにもかかわらず止まる箇所が異なります。 今まで考えたことがなかったのですがGNUとIntelのコンパイラの違いはなんなのでしょうか?また、この二つ以外にいいコンパイラはあるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1 の onosuke さんが言われているとおりで、プログラムのバグが原因であることがほとんどでしょう。 移植によって、眠っていたバグが表面化することは珍しくないです。原因を突き止めるしかありません。 例えば、 char *p; *p = 1; としたときに、p が初期化されていないので、p の値は不定になりますよね?そうすると、*p = 1 がどこに書き込むかも不定になります。 不定といっても、乱数のようなものではなく、直前のコードで、ある程度固定した値になる可能性が高いです。コンパイラが違えば、その値が Segmentation fault になるかならないかの違いが出ることもあります。 Segmentation fault にならないと、気づかないうちに、別の変数を書き換えていたりすることもあるので、そちらの方が怖いです。
その他の回答 (1)
- onosuke
- ベストアンサー率67% (310/456)
第一に,コンパイラの吐く機械語のコードが違います。 ですから,ソースコードレベルでメモリアクセスのバグがあれば,質問のようなことは普通に起こります。
お礼
同じソースコードなのに不思議ですね。一つのプログラムを作りたいとき色々な書き方があるのと同じ感覚でしょうか? そう考えると納得ですね。 わかりやすい回答ありがとうございます。
お礼
教えていただいたのに、お礼が遅くなり大変申し訳ありません。 私でもわかるように優しく丁寧に書いて下さってありがとうございます。一生懸命バグを探したいと思います。