代码之家  ›  专栏  ›  技术社区  ›  Andy Balaam

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

  •  2
  • Andy Balaam  · 技术社区  · 17 年前

    我们正在考虑将我们的跨平台C++应用程序的Win32构建从MS Visual Studio 2003移动到MS Visual Studio 2005。(是的,我们很有前瞻性;)

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

    8 回复  |  直到 17 年前
        1
  •  6
  •   Timo Geusch    17 年前

    我刚刚通过VS2005将一个相对较大的代码库从VS2003迁移到VS2008,我发现的大多数问题都是常量/非常量问题,比如将返回常量char*的函数的返回值赋给char*。VS2005和VS2008在const正确性方面都要挑剔得多,如果您现有的代码库在const正确性方面有点马虎,对不起,老派,您会看到很多这样的情况。

    一个非常受欢迎的变化是,VS2005中的模板支持明显优于VS2003(它本身是对早期版本的一个重大改进),这使我能够为模板相关的问题提供一些解决方法,这些问题是团队自VC++4.x的令人兴奋的日子以来一直在拖延的。

    您可能会遇到的一个问题是关于“不推荐使用”或“不安全”函数的大量警告,尤其是在使用C字符串函数时。其中很多都是“被微软弃用的”(只是它们省略了“被微软”的部分),并且仍然是完全可用的,但它们是已知的缓冲区溢出的潜在来源。在我转换的项目中,我设置了预处理器define _CRT _SECURE _NO _警告,并禁用了警告C4996以关闭这些有点烦人的消息。

    我们遇到的另一个问题是MS在VS2005或VS2008中更改了默认的时间大小(抱歉,我不记得了-它肯定在VS2008中,但可能已经在VS2005中了),因此如果您必须链接到在界面中使用时间的旧库,您必须使用32位时间来恢复到旧编译器的行为。

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

    总体而言,我更喜欢VS2005/8到VS2003,如果这是一个选项,我建议升级到VS2008,因为编译器比VS2005更好,所以MS在改进本机C++编译器方面做了大量的努力。这其中的一部分在2005年已经很明显了,所以即使你坚持到2005年,你至少会得到一些好处。

        2
  •  5
  •   Enno    17 年前

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

    检查 this article

    您可以获得Visual Studio 2005的免费快速版 here .

        4
  •  2
  •   Lodle    17 年前

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

    不过,您的2003代码仍将编译。

        5
  •  1
  •   James Curran    17 年前

        6
  •  0
  •   Burkhard    17 年前

    不,我不会期望更多。

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

        7
  •  0
  •   Nemanja Trifunovic    17 年前

    此外,康斯德禁用 checked iterators

        8
  •  0
  •   Jason Plank Maksim Kondratyuk    14 年前

    如果源代码符合C++标准,则不需要更改任何内容以移动到2005。您可能会收到一些贬值的警告,但不会出现编译错误。

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

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

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