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

时间:2008-11-13 09:48:38

标签: c++ visual-studio-2005 migration visual-studio-2003

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

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

8 个答案:

答案 0 :(得分: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年,你也至少可以获得一些好处。

答案 1 :(得分:5)

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

检查this article并考虑这些更改对现有代码的影响有多大。清理环路一致性可能有点工作。

您可以获得Visual Studio 2005 here的免费Express版。

答案 2 :(得分:4)

在决定是否&amp ;;时,您应该查看MS的重大更改列表。如何进行这个项目。

Breaking Changes VC 2005 - 2008

Breaking Changes in the Visual C++ 2005 Compiler

Breaking Changes in Visual C++ .NET 2003

答案 3 :(得分:2)

你会发现很多字符串命令会给你警告,因为在2005年他们提高了安全性,试图阻止缓冲区运行。

你的2003代码仍然可以编译。

答案 4 :(得分:1)

我最近将一个已有10年历史的VC6程序转换为VS2008。它不需要对源代码进行任何更改,并且项目文件所需的唯一更改由升级向导处理。

答案 5 :(得分:0)

没有。我不会指望不止一些。

编辑:您应该/可以首先使用vs2005的演示版试用代码。

答案 6 :(得分:0)

另外,请考虑禁用checked iterators,否则在移植到新版本后性能可能会受到影响。

答案 7 :(得分:0)

如果您的源代码符合C ++标准,则不需要更改任何内容以移至2005.您可能会收到一些折旧警告,但不会产生编译错误。

人们从旧版VS到新版本的主要问题是新版本更符合标准。

类似的事情:

for(i = 0; i < length; ++i)
{
}

在此点之前未定义i时,在以前版本的VS中正常工作,但在2005年它正确地将i标记为未定义的变量。