真的值得从 VC6 -> vc2005,2008 移植吗?
Posted
技术标签:
【中文标题】真的值得从 VC6 -> vc2005,2008 移植吗?【英文标题】:Is it really worth porting from VC6 ->vc2005,2008? 【发布时间】:2008-11-18 06:47:41 【问题描述】:你预见到的所有问题是什么。
【问题讨论】:
【参考方案1】:-
Microsoft 不再支持 VC 6,无论如何。如果出现问题并且无论出于何种原因我们无法编译,我们将完全靠自己无法从 Microsoft 获得任何帮助。以这种方式出现问题似乎不太可能,但如果相关代码是主要收入来源,那么您就可以保持平衡。
在 VC6 中无法编译 64 位代码。 32 位程序在 64 位 Windows 上运行——至少现在是这样。但是,如果您需要利用创建原生 64 位产品所带来的潜在速度和内存增益(例如,能够在单个进程中使用超过 3 GB 的 RAM),那么 VC6 就出局了。
VC9 具有更好的标准合规性。 VC6 的标准合规性非常差。这实际上既是移植的原因,也可能是不移植的原因。使用 VC6 的程序员习惯于以“错误的方式”做事,并且需要重构大部分代码才能在 VC9 中工作。
上面 #3 的一个简单示例是 for 循环:
for( int n = 0; n < someMax; ++n )
// do stuff
printf("Did %d stuffs", n);
此代码在 VC6 中有效,但在 VC9 中无效。它实际上是一个格式错误的程序——VC6 允许它是 VC6 中的一个缺陷。
从 VC6 移植到 VC9 的决定不是灌篮。您必须考虑项目的难度,并与您获得的任何收益和避免的任何问题进行平衡。
在决定是否以及如何开展此项目时,您应该查看 Microsoft 的重大更改列表。第一个列表,从 VC6 到 VC7 的重大更改,是一个巨大的列表。相比之下,其他的要小得多。这表明如果你从 VC6 移植到任何东西,它应该至少是 2005 年。
Breaking Changes VC 2005 - 2008 (VC 2005 -> VC 2008) Breaking Changes in the Visual C++ 2005 Compiler (VC 2003 -> VC 2005) Breaking Changes in Visual C++ .NET 2003 (VC6 -> VC 2003)【讨论】:
【参考方案2】:你说的代码库有多大?
移植一个小程序(主要是非模板化的 C++ 代码)应该是相当简单的。
然而,我曾经不得不将 100.000 行使用模板的代码从 VC6 转换为 VC2005,这是一个噩梦般的一周(工作 5 天),主要问题是我必须手动修复大约 30%问题(70% 是相当微不足道的,可以通过搜索和替换来解决它们)。但更多的问题是旧代码没有测试用例和测试框架,所以即使我让应用程序编译并且没有段错误,看起来还不错(?),我不能保证它实际上工作的一切正如它应该的那样。
所以实际上我的建议是考虑代码的大小和测试的可用性,并考虑代码是否真的需要移植(在我的情况下是“是”,但并非总是如此,尤其是如果软件很快就会淡出)
【讨论】:
模板编程不多,但使用过标准容器 标准容器应该没问题,VC6 的 stl 实现基本上是 VC2005 的一个损坏的子集,所以大部分时间没问题,但可能有一些特殊的“修复”,来自开发人员,以对付旧的 stl 容器的错误。当心那些!以上是关于真的值得从 VC6 -> vc2005,2008 移植吗?的主要内容,如果未能解决你的问题,请参考以下文章