- 締切済み
VC++のバージョンの違いによる影響について
いつもお世話になります。 10年ほど昔に作成したプログラム(VC++6.0でビルド)を分解して、例えばライブラリとしてVC++2005とかの新しいバージョンで作り変えようとした時に、考えられる問題点などありますでしょうか? ビルド自体ができない可能性があったり、ビルドができても実行時になんらかの理由でエラーが起こったりするでしょうか。 また、MFCを使っている場合は、バージョンが違うとうまくうごかないものでしょうか? VC++自体もほとんど使ったことがなく、想像もできません。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- takoashi
- ベストアンサー率39% (21/53)
std::auto_ptrの動作が違う
- norachlo
- ベストアンサー率100% (10/10)
プロジェクトファイル自体は、VC のコンバータが自動的に変換してくれるので そのままでもビルドを試みることはできますが、大抵は何らかの問題が起きると思います。 ざっと思いつく限りでは以下のような点が異なります。 ・for 文の中で宣言された変数のスコープが異なる。 VC6 では for ブロックの外で宣言されたことになる。 VC2005 では for ブロックの中で宣言されたことになり、 外では利用できない(ただし設定で変更できる)。 ・多くの C標準関数について、アンセーフであるとの警告が出る。 マクロ定義で(ある程度?)出ないようにもできる。 ・wchar_t の扱いが変わる(これもたぶん設定で変更可能)。 unsigned short から組み込み型へ。 なので一部、明示的なキャストが必要だったり、挙動が異なっていたりする。 ・一部無くなったヘッダがある。 iostream.h, fstream.h など。 ・演算子の優先順位について明示する必要がある(警告)。 flag & 0x40 != 1 このような書き方を以下のように改めなくてはならない。 (flag & 0x40) != 1 また、私自身はあまり把握していませんが、ご指摘の通り MFC のバージョン間の相違もあり、 リンクするファイル(mfc*.lib など)が異なるだけではなく、 仕様の違いからエラーが生じることもあるようです。 ただ、上記の大半はさほどの手間もなく対処可能なので、 とりあえず現状のままでコンパイルにパスしそうかどうかを確認してみるのも手だとは思います。
お礼
早速のご回答、ありがとうございました。細かい点まで異なるのですね。とりあえずはアドバイスいただいたように、ビルド確認しながら直していこうと思います。ありがとうございました。
お礼
ご回答ありがとうございました。標準ライブラリでも動作が異なるのですね。参考になりました。