質問: gcc バージョン違いによるコンパイルエラー c言語でweb系のプログラムを作成している者です。 以前まで、osはfreebsd 4.11-release-p12・gccのバージョンは2.95.4でコンパイルできていたプログラムが、osはfreebsd 5.4-release-p8・gccのバージョンは・gccのバージョンは 3.4.2で、今まで出なかったようなエラーが沢山出現し、コンパイルできなくなってしまいました。 osをインストールし直すのは、既に稼働中のサイトですので厳しく、gccのバージョンを下げるかソースを書き換えるかして対処する方向で行きたいと考えております。 しかし、gccの2.95.4の圧縮ファイルはもう、gccの公式サイトに落ちておらず、バージョンダウンは難しそうです。 gccのバージョンによるコンパイルエラーを乗り越えた方、ご指摘など有りましたらお教えくださると幸いです。
回答: バージョンが2.xから3.xに変わったときに出るコンパイルエラーの多くは、処理系の癖に依存するコーディングをしていたことが原因です。具体的なエラーメッセージとソースコードがわからないと正確なことは何もわかりません。 他に、コンパイルエラーは出なくても、部分式の評価順序が変わっていたりするので、規格上、「不定」にあたる動作した実装をしていると、実行時に振る舞いが変わったりします。 バージョンダウンはできると思いますが、将来にわたって不安を残すことになるので、この機に修正することをお勧めします。なお、gccの最新バージョンは4.0.2です。3.xと4.xではまた異なるので、「不定」や「未定義」に依存しないコードを目指してください。加えて、gnu拡張に依存するより、c99に対応させる方が幾らか安全です。 今回のことは、gccが悪いのではなく、元々内在していた不具合が顕在化しただけと考えてください。