我们正在考虑将我们的跨平台 C++ 应用程序的 win32 版本从 MS Visual Studio 2003 迁移到 MS Visual Studio 2005。(是的,我们非常具有前瞻性;)
我们是否应该期望进行许多代码更改才能使其编译和工作?
我们正在考虑将我们的跨平台 C++ 应用程序的 win32 版本从 MS Visual Studio 2003 迁移到 MS Visual Studio 2005。(是的,我们非常具有前瞻性;)
我们是否应该期望进行许多代码更改才能使其编译和工作?
我刚刚通过 VS2005 将一个相对较大的代码库从 VS2003 迁移到 VS2008,我发现的大多数问题都是 const/non-const 问题,例如将返回 const char * 的函数的返回值分配给 char *。VS2005 和 VS2008 在 const 正确性方面都更加挑剔,如果您现有的代码库在 const 正确性方面有点草率,抱歉,老派,您会看到很多这样的。
一个非常受欢迎的变化是 VS2005 中的模板支持明显比 VS2003 中的更好(这本身就是对早期版本的重大改进),这使我能够为团队自VC++ 4.x 令人兴奋的日子。
您可能会遇到的一个问题是大量关于“已弃用”或“不安全”函数的警告,尤其是在您使用 C 字符串函数时。其中许多“已被 Microsoft 弃用”(只是它们省略了“由 Microsoft”部分)并且仍然完全可用,但它们是已知的缓冲区溢出的潜在来源。在我转换的项目中,我设置了预处理器定义 _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 年,您也至少会获得一些好处。
在决定是否以及如何进行此项目时,您应该查看 MS 的重大更改列表。
你会发现很多字符串命令会给你警告,因为在 vis 2005 中他们加强了安全性以尝试停止缓冲区运行。
您的 2003 代码仍然可以编译。
我最近将一个使用了 10 年的 VC6 程序转换为 VS2008。它不需要更改源代码,并且项目文件所需的唯一更改由升级向导处理。
不,我不会期望超过几个。
编辑:您应该/可以先尝试使用 vs2005 演示版的代码。
此外,考虑禁用检查迭代器或移植到新版本后性能可能会受到影响。
如果您的源代码符合 C++ 标准,则无需更改任何内容即可移至 2005。您可能会收到一些贬值的警告,但不会出现编译错误。
人们从旧版本的 VS 升级到新版本的主要问题是新版本更符合标准。
像:
for(i = 0; i < length; ++i)
{
}
在i
此之前未定义的时间在以前版本的 VS 中工作正常,但在 2005 年它正确地将 i 标记为未定义变量。