将C++从VS2003迁移到VS2005需要哪些代码更改?

And*_*aam 2 c++ migration visual-studio-2003 visual-studio-2005

我们正在考虑将我们的跨平台C++应用程序的win32版本从MS Visual Studio 2003迁移到MS Visual Studio 2005.(是的,我们非常具有前瞻性;)

我们是否应该期待许多代码更改以使其编译和工作?

Tim*_*sch 6

我刚刚通过VS2005将相对较大的代码库从VS2003迁移到VS2008,我发现的大多数问题都是const/non-const问题,比如分配一个返回const char*到char*的函数的返回值.VS2005和VS2008在const正确性方面更加挑剔,如果你现有的代码库有点草率,对不起,旧学校在const正确性方面,你会看到很多.

一个非常受欢迎的变化是VS2005中的模板支持明显优于VS2003(本身对早期版本有很大的改进),这使我能够针对模板相关问题抛出几个变通方法,因为团队一直在拖延令人兴奋的VC++ 4.x.

您可能遇到的一个问题是关于"已弃用"或"不安全"函数的大量警告,尤其是在使用C字符串函数时.其中很多都被"微软弃用"(只是他们忽略了"微软"部分)并且仍然完全可用,但是已知是缓冲区溢出的潜在来源.在我转换的项目中,我设置预处理器定义_CRT_SECURE_NO_WARNINGS并禁用警告C4996以关闭这些有点恼人的消息.

我们遇到的另一个问题是MS已经在VS2005或VS2008中更改了time_t的默认大小(我道歉但我记不清了 - 它肯定在VS2008中但它可能已经在VS2005中)所以如果你必须链接对于在接口中使用time_t的旧库,您必须使用_USE_32BIT_TIME_T来恢复旧编译器的行为.

如果您的解决方案包含多个项目,您可能会发现并行构建功能(默认情况下已打开)将突出显示缺少的构建依赖项.因此项目突然以错误的顺序构建,但如果从并行构建恢复为线性构建,则可以神奇地构建.

总的来说我更喜欢VS2005/8到VS2003,如果这是一个选项,我建议升级到VS2008,因为编译器比VS2005"更好" - MS似乎在改进原生C++编译器方面付出了巨大努力.其中一部分在2005年已经很明显,所以即使你坚持2005年,你也至少可以获得一些好处.


Enn*_*nno 5

如果您的代码已经很干净并且在没有警告的情况下进行编译,那么这不是一个很大的进步.

查看本文,并考虑这些更改对现有代码的影响有多大.清理环路一致性可能有点工作.

您可以在此处获得Visual Studio 2005的免费Express版本.