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

我们是否应该期望进行许多代码更改才能使其编译和工作?

最佳答案

我刚刚通过VS2005将相对较大的代码库从VS2003迁移到VS2008,而我发现的大多数问题都是const / non-const问题,例如将返回const char *的函数的返回值赋给char *。在const正确性方面,VS2005和VS2008都更加挑剔,如果您现有的代码库在const正确性方面有点草率,抱歉,老派,您会发现很多。

一个非常可喜的变化是,VS2005中的模板支持明显优于VS2003(它本身是对早期版本的重大改进),这使我能够提出自模板开发以来一直困扰团队的模板相关问题的几种解决方法。 VC++ 4.x令人兴奋的日子。

您可能会遇到的一个问题是关于“不推荐使用”或“不安全”功能的大量警告,尤其是在使用C字符串功能的情况下。其中许多是“Microsoft不推荐使用的”(仅保留了“Microsoft所提供的”部分),并且仍然可以完美使用,但已知是缓冲区溢出的潜在来源。在我转换的项目中,我设置了预处理器定义_CRT_SECURE_NO_WARNINGS,并禁用了警告C4996以关闭这些令人讨厌的消息。

我们遇到的另一个问题是,MS已在VS2005或VS2008中更改了time_t的默认大小(我很抱歉,但我不记得了-它肯定在VS2008中,但可能已经在VS2005中),因此如果必须链接对于在接口(interface)中使用time_t的旧式库,您必须使用_USE_32BIT_TIME_T还原为较早的编译器的行为。

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

总的来说,我确实更喜欢VS2005 / 8而不是VS2003,如果可以的话,我建议升级到VS2008,因为编译器比VS2005“更好”-MS似乎在改进本机C++编译器上付出了巨大的努力。其中一部分已经在2005年引起注意,因此即使坚持使用2005年,您也将至少获得一些好处。

08-27 02:25