我们正在考虑将我们的跨平台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字符串函数时。其中很多都是“微软弃用”的。 (只是他们省略了“通过微软”部分)并且仍然完全可用,但是已知潜在的缓冲区溢出源。在我转换的项目中,我设置预处理器定义_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年,你也至少可以获得一些好处。

其他提示

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

检查这篇文章并考虑这些变化的影响有多大在您现有的代码上。清理环路一致性可能有点工作。

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

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

VC 2005 - 2008的重大变革

Visual C ++ 2005编译器中的重大变化

在Visual C ++ .NET 2003中突破性变化

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

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

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

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

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

此外,consder禁用检查迭代器或移植后性能可能会受到影响到新版本。

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

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

类似的事情:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top