繁体   English   中英

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

[英]What code changes are required to migrate C++ from VS2003 to VS2005?

我们正在考虑将我们的跨平台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版本。

在决定是否以及如何进行此项目时,您应该查看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年它正确地将我标记为未定义的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM