Visual Studio 可帮助你使用编译器选项、代码分析警告和编辑器功能(如快速修复、快速信息以及增强的滚动条)升级旧 C++ 代码。 “旧代码”一词是指以下任一类别:
以前由 Microsoft C++ (MSVC) 编译器允许但从未符合C++标准的代码。
若要升级不符合标准的较旧 MSVC 代码,请启用
/permissive-编译器选项。 在代码编辑器中,所有不符合标准的用法实例都用红色波浪线下划线标出。 “错误列表”窗口中的错误消息包括有关如何修复错误的建议。 单击错误代码可转到文档中的帮助页。 如果同时修复所有错误是不切实际的,可以通过启用/permissive-选项、修复部分错误,然后再次禁用选项,分阶段升级不符合标准的代码。 代码将通过新的改进功能进行编译,你可以稍后返回并修复剩余的问题。 有关不符合标准的 MSVC 代码的示例,请参阅/permissive-页面。在早期版本的 C++ 标准中允许但在更高版本中已弃用或移除的代码。
若要升级到较新的语言标准,请将 C++ 语言标准选项设置为所需的标准,并修复引发的任何编译错误。 一般情况下,我们建议将语言标准设置为
/std:c++17或/std:c++20。 升级到较新的标准时引发的错误与使用/permissive-选项时引发的错误无关。符合标准的所有版本但不再被视为新式 C++ 中的最佳做法的代码。
若要确定建议更改的代码,请运行代码分析。
打开并转换旧项目
如果旧项目基于较旧版本的 Visual Studio,则仍可以在较新版本中加载它们,并在该版本中工作,同时保持与旧版本的向后兼容性。 准备好永久迁移到新版本的 Visual Studio 时,可以重定目标项目。 这样,便可以在 IDE 中使用最新的生成工具和项目功能,但你将无法再在旧版 Visual Studio 中加载重定目标项目。
若要将项目重定向到 Visual Studio 2026 格式,可以使用设置助手,该助手在首次打开包含较旧项目的解决方案时显示。 还可以通过在 解决方案资源管理器 中右键单击解决方案并选择 “重定目标”解决方案来访问它。
安装助手会给出选择:继续使用旧版本,并安装构建所需的任意缺失的构建工具或 Windows SDK;或者重新指定项目目标以进行升级。 可以为解决方案中的每个项目做出重定目标选择,也可以选择“重定目标全部>应用”来升级。
有关详细信息,请参阅从早期版本的 Visual Studio 升级 C++ 项目。
错误列表
设置了所需的 C++ 语言标准和其他任何编译器选项(“项目”“属性”>“常规”)后,按 Ctrl+Shift+B 编译项目。> 你应该会在代码的各个位置看到一些红色波浪线形式的错误和警告。 错误也会显示在“错误列表”中。 有关具体错误的详细信息,请单击错误代码以转到文档中的帮助页。 以“C”开头的错误代码是编译器错误。 以“MSB”开头的代码是指示项目配置出现问题的 MSBuild 错误。
文档运行状况指示器
编辑器底部的文档运行状况指示器显示当前文档中的错误数和警告数,你可以直接逐个浏览警告/错误。
在许多情况下,可以在记录 Visual Studio 更改历史记录和符合性改进的文档中找到有关具体错误的详细信息。
使用代码分析实现代码现代化
升级时,建议对项目运行代码分析,使代码至少符合 Microsoft 本机建议规则。 这些规则是 Microsoft 定义的规则和一部分 C++ Core Guidelines 的组合。 符合这些规则之后,可以大大减少或消除常见的 bug 来源,同时使代码的可读性更强,从而更易于维护。 默认情况下,使用 Microsoft 本机建议规则的 Code Analysis 处于启用状态。 你可以在“项目”“属性”>“代码分析”下启用其他规则。> 违反其中一条规则的代码将被标记为警告,并在代码编辑器中用绿色波浪线下划线标出。 将鼠标悬停在波浪线上,可以看到描述问题的快速信息工具提示。
单击“代码”列中的筛选器图标可选择显示哪些警告。
代码分析错误和警告也像编译器错误一样出现在错误列表中。
可以更改使哪些规则处于活动状态,并创建自定义规则集。 有关使用代码分析的详细信息,请参阅 C/C++ 代码分析概述。
使用快速操作使代码实现现代化
代码编辑器为一些常见的建议提供了快速操作。 在显示灯泡图标时,可以单击它以查看可用的快速操作。
将宏转换为 constexpr 函数
下图显示了名为 AVERAGE 的宏的使用情况,它具有默认的语义着色。 该图像还显示了当鼠标光标悬停在它上方时显示的快速信息工具提示:
由于新式 C++ 中不建议使用宏,使用 Visual Studio 可以轻松地将宏转换为 constexpr 函数:
右键单击
AVERAGE并选择“转到定义”。单击螺丝刀图标,然后选择“将宏转换为 constexpr”
这将对宏进行转换,如下所示:
现在,对 AVERAGE 的调用被着色为一个函数调用,快速信息工具提示显示推断出的函数类型:
初始化变量
未初始化的变量可能包含会导致严重 bug 的随机值。 代码分析标记这些实例,编辑器提供快速操作:
转换为原始字符串文本
与具有嵌入转义字符的字符串相比,原始字符串字面量更不容易出错,而且键入起来也更方便。 右键单击字符串,然后选择“快速操作”将其转换为原始字符串字面量。
字符串被转换为 R"(C:\Users\bjarnes\demo\output.txt)"。