Visual Studio 2017 提高 C++ 核心检查

[原文发表地址]: C++ Core Check improvements in Visual Studio 2017 15.5 [原文发表时间]: 2017年11月15日,[作者]: Sergiy OryeKhov  对于本机代码静态分析工具,我们已经在Visual Studio 2017 15.5 预览版 4上进行了C++ 核心准则检查 扩展。自从15.3 以来大部分工作都集中在新的规则,这将帮助开发者开始编写安全的C++新项目,而那些使用旧版开发的项目可以被移去更安全的现代C++。对于刚开始使用核心准则的人,我们建议您去查看工作草案的最新版本:“C++ 核心准则检查”。 这篇文章是关于在VS2017 15.5 上改变的概述。有关当前发布版的更多信息,请参阅docs.microsoft.com 上受支持的规则集列表。          注意docs.microsoft.com上的一些链接还尚未解决。不是所有的官方的文档都是为这个话题编写的。 新的规则集          在之前的发布版本中我们引入几个新的规则集以允许客户可以缩减代码分析结果。对15.5 这个规则的实施扩展了一些已经存在的规则集(原始指针,所有者指针,唯一指针,类型),也引入了一些新的类目: 类规则:本节包含了一些主要关注使用特殊方法和虚拟规范的规则。这是一个为类和类层次检查建议的一个子集。 并行规则:这当前包含一个单一的规则,可以捕获严重的声明守卫对象。更多的信息请参照 C++ 核心准则中相关的并行规则。 声明规则:这是一组来自接口准则的规则,这关注的是如何声明一个全局的变量。 函数规则:这两个检查有助于采用noexpect 说明符。这是清晰的功能设计和执行准则的一部分。 共享指针规则:作为资源管理准则执行的一部分,我们添加了一些特定的用于如何将共享指针传递到函数或者本地使用的规则。 风格规则:在这次发布中我们有一个简单但是很重要的检查就是禁止使用goto。这是在C++中提高代码风格和表达式与语句使用的第一步。尽管这是被期待的在C++ 核心准则下的goto语句,正确使用这个结构是罕见的,他值得去审查。 每一套新规则 类规则 C26432 DEFINE_OR_DELETE_SPECIAL_OPS 特殊的操作(例如:析构函数和拷贝构造函数)意味着特殊的行为,并且应该全套的定义这种行为。 C26436 NEED_VIRTUAL_DTOR 虚拟方法有一种多态的行为,这需要对对行清理进行更细致的管理。 C26434 DONT_HIDE_METHODS通过名称隐藏方法就像隐藏变量一样。名称不应该出现歧义。 并行规则 C26441…

0

Visual Studio构建工具现在包括VS2017和VS2015 MSVC工具集

[原文发表地址] Visual Studio Build Tools now include the VS2017 and VS2015 MSVC Toolsets [原文发表时间] 2017/11/01 从两年前我们推出 Visual C ++ 构建工具以来,它已经取得了巨大的成功。 C ++构建工具最初是作为一个独立的安装程序发布的,在不安装Visual Studio IDE的情况下,只安装了构建C ++项目所需的工具。 许多开发人员发现它们在不需要完全VS安装的环境中很有用(如构建服务器或CI系统)。 这些工具始终保持最新状态,仅提供最新支持的MSVC编译器工具集版本。 使用Visual Studio 2017的全新灵活的安装程序,我们能够移除我们定制的C ++ 构建工具设置来使用新的VS 2017安装体验。 正如我们在VS2015中所做的那样,我们更新了Build Tools中的MSVC编译器工具集以匹配VS 2017 v141编译器工具集。 Visual Studio构建工具中的MSVC编译器工具集目前具有VS2017 15.3版本中的所有C ++ 17功能和STL修补程序。 当我们发布预览版本的VS2017 15.5版时,我们将再次更新Visual Studio Build Tools中的MSVC编译器工具集。  您可以立即从visualstudio.com下载Visual Studio构建工具。 构建工具被许可作为您现有的Visual Studio许可证的补充,因此没有额外的成本将它们集成到您的工作流程中。 安装VS2015 MSVC v140工具集 你们很多人都告诉我们,你们仍然需要Visual…

0

Visual Studio 支持CMake–导入你的CMake Cache

[原文发表地址] CMake Support in Visual Studio – Import Your CMake Cache [原文发表时间] 2017/11/01 配置一个CMake项目,然后用你想要的方式来创建往往是一个耗时的过程,因此在Visual Studio 2017 15.5 preview中我们是这个过程比以往更加地容易,现在你可以把现有的CMake项目和缓存配置导入到IDE中。现在你可以导入一个现有的CMakeCache.txt文件,Visual Studio也会自动地提取自定义变量并给予它们创建一个预先生成的CMakeSettings.json文件。 请检查预览版本并试用最新的CMake功能。如果你才刚开始接触CMake,请先查阅这篇博客CMake support in Visual Studio。我们期待你的反馈。 导入一个CMake项目 现在我们填加了一个新的入口选项来打开CMake文件:文件->打开->CMake。通过这种方式你可以直接打开一个CMake项目(通过选择一个CMakeLists.txt文件)或是导入一个CMake Cache(通过选择一个CMakeCache.txt文件): 导航到CMakeCache.txt文件的激活导入向导页面: 当你导入了一个CMake Cache,我们会把原始的缓存保持原样。因此,该缓存应该从命令行或使用任何工具或IDE来生成它。 Visual Studio提取了用于创建缓存的命令行参数(如CMake变量)并将其存储在项目的根路径CMakeLists.txt边上的CMakeSettings.json文件中。然后,这个文件可以用来生成一个新的缓存,Visual Studio将使用这个新缓存来创建项目。 请记住,并非缓存中的所有内容都将被导入。诸如生成器和编译器位置之类的属性被替换为已知可用于IDE的默认值。 你的反馈是确保我们提供最佳CMake体验的关键部分。我们很想知道Visual Studio 2017 15.5 preview如何为你工作。如果你有任何特定于CMake工具的反馈,请联系cmake@microsoft.com。对于普通的问题请填写反馈。

0

使用Visual C++和Open Folder自定义您的环境

[原文发表地址] Customizing your Environment with Visual C++ and Open Folder [原文发表时间] 2017/11/02 自从我们支持了打开C ++代码文件夹的功能之后,社区的客户一直希望有更多地可以控制构建和编辑环境的功能。为实现这些想法,我们在Visual Studio 2017的最新版本中增加了一些新的方法可以通过使用CppProperties.json来自定义您的环境。 这个新的自定义界面使您能够使用更广泛的工具,编写更简洁的CppProperties文件,并且具有与MSBuild类似的强大的单个配置的自定义。下面的主题展示了原始C++ Open Folder文章中描述的几个概念。如果您不熟悉编辑CppProperties.json,Launch.vs.json和Tasks.vs.json,可能需要先阅读该文章。 C++ Open Folder这篇文章与我们之前发布的为CMake项目自定义您的环境相匹配,所以如果您已经阅读过了,可能会发现其中有一些内容是相似的,因为我们努力保持经验一致。而最重要的区别在于“关于Launch.vs.json和Tasks.vs.json”如何使用特定于配置的变量。 CppProperties.json的新功能 这种新的灵活性的核心在于您的项目的CppProperties.json文件,它源于两个新的概念: 使用“inheritEnvironments”属性来继承单个配置或一组默认全局环境变量的能力。 通过定义“environments”块来定义单个配置或是自定义环境变量及其值的能力。 通过使用“$ {env.VAR}”语法将这些新概念与CppProperties.json,launch.vs.json和tasks.vs.json中现有的使用环境变量的能力相结合,为创建丰富的开发环境提供了强大的机制。 我们先来看看如何使用此功能的快速示例: 1{ 2 // The “environments” property is an array of key value pairs of the form 3 // { “EnvVar1”: “Value1”, “EnvVar2”: “Value2” } 4 “environments”:…

0

Visual Studio Code C / C ++扩展2017年10月更新

[原文发表地址] Visual Studio Code C/C++ extension October 2017 update [原文发表时间] 2017/10/20 昨天我们发布了2017年10月的Visual Studio Code C / C ++扩展的更新。根据上个月发布的Lightbulb的智能感知包含路径功能的建议,我们正在添加另一个功能让智能感应设置更容易——支持compile_commands.json文件,无需手动配置includes和defines。此外,此更新还引入了新的UI来显示智能感应得解析状态。 Compile_commands.json为智能感应提供includes和defines的相关信息 compile_commands.json文件由一系列“命令对象”组成的编译数据库,其中每个命令对象指定了一种在项目中编译翻译单元的方法。 它的格式会在Clang文档中被指定,可以由许多构建系统自动生成,包括CMake和Ninja。当智能感知引擎设置为“Default”时,如果c_cpp_properties.json文件的“compileCommands”属性中指定了compile_commands.json,它将先从compile_commands.json文件中读取includes和defines来启动智能感应功能。 如果解析失败,智能感知引擎将会回退然后读取c_cpp_properties.json文件,从文件中的“includePath”属性中使用include路径,从“defines”属性中读取defines。 尝试使用基于编译器的智能感知 请注意,compile_commands.json文件仅仅在您启用了新的基于编译器的引擎时被支持。这样您将获得改善,对于多个智能感应的功能会获取更加准确的结果,包括类/结构/命名空间成员的自动完成建议,快速信息工具提示,错误曲线,高亮引用和参数提示。在您的settings.json文件中,通过更改“C_Cpp.intelliSenseEngine”属性, 从“Tag Parser”改为“Default”(从菜单上的File-> Preferences-> Settings中打开),来打开新的智能感知功能。 智能感知状态指示器 在状态栏的右上角,您会发现两个图标可以显示智能感知引擎的解析状态 ——红焰图标代表基于编译器的智能感知引擎,白色数据库图标用来显示Tag Parser在解析文件中的位置。将鼠标悬浮在数据库图标上可通过提示信息了解已解析的文件数和需要解析的文件总数。 告诉我们您的想法 下载Visual Studio Code的C / C ++扩展,尝试一下,让我们知道您的想法。关于GitHub的文件问题和建议。在本次快速调查中为我们提供反馈意见,以帮助您根据自己的需要制定此扩展。您也可以在Twitter上找到我们(@VisualC)。

0

Visual Studio中的ARM GCC交叉编译

[原文发表地址] ARM GCC Cross Compilation in Visual Studio [原文发表时间] 2017/10/23 在Visual Studio 2017 15.5预览2中,我们引入了针对ARM微控制器的交叉编译的支持。要在安装中启用此选项,请使用C ++工作负载选择Linux开发,并选择嵌入式和IoT开发选项。这将添加ARM GCC交叉编译工具和Make进行安装。 我们的交叉编译支持使用我们的“Open Folder”功能,因此没有涉及项目系统。我们正在使用来自其他Open Folder场景的相同的JOSN配置文件,并添加了其他选项来支持这里介绍的工具链。我们希望这为许多风格的嵌入式开发提供了灵活性。开始使用此功能并了解功能的最佳方法是使用ARM mbed在线编译器导出的项目。我们将在这里介绍基础知识,了解有关在线编译器的更多信息,请参阅ARM的教程,您可以在这里注册一个账号。 ARM的在线编译器可以让您选择目标平台并相应地配置您的项目。我们正在使用ST Nucleo-F411RE,但编译器支持的任何一个板都应该是正常的。单击新建,然后在打开的对话框中选择一个模板以开始使用。我选择了“Blinky LED test for ST Nucleo boards”。 然后在程序工作区中选择程序,右键单击并选择导出程序。 在导出程序对话框中,为导出目标选择GCC(ARM Embedded)。 这将下载Zip文件到您的计算机。将该文件的内容提取到您喜欢的位置并打开Visual Studio。现在用File–>Open–>Folder打开它。我们需要通知VS这是什么类型的的C++代码,所以进入项目菜单并选择Edit Settings–>CppProperties.json。修改内容,所以只有一个条目与以下匹配。 { “configurations”: [ { “inheritEnvironments”: [ “gcc_arm” ], “name”: “gccarm”, “includePath”: [ “${env.INCLUDE}” ], “defines”: [ ] } ] } gcc_arm的环境定义设置了VS安装的ARM…

0

Visual Studio 15.5 预览版1产品改进:结构可视化,Ctrl+单击转到定义,更快的查找所有引用以及其他更多的部分

[原文发表地址]Visual Studio 15.5 Preview 1 Productivity Improvements: Structure Visualizer, Ctrl + Click Go to Definition, Faster Find All References, and More [原文发表时间]2017/10/11 Visual Studio 2017更新15.5预览版1为您带来许多生产力和性能的改进,作为一名C++开发人员,这些改进能节省您的时间。在此版本中,我们从产品生产力工具扩展引入了两个功能 :可视化结构以及快捷键Ctrl+单击转到定义。此外,我们还显著提高了一些代码导航和重构操作的性能。 结构可视化 & Ctrl+单击转到定义 结构可视化能使您一目了然的清楚您的代码构造方式,以及是如何嵌套的。通过编辑器窗口中的虚线指示,您可以很快地看到它在组织每个逻辑块代码中的作用。在代码行上滑动直到光标指向的位置能给您显示出代码的层次布局。 需要注意一个限制:原结构可视化扩展为编辑器窗口中的滚动条提供了一个进一步的改变,但是在这个产品版本中没有。 第二个改进是在编辑器窗口中使用Ctrl+单击一个代码符号能快速的跳到它的定义,而不是按F12,或者右键单击并选择上下文菜单中的此选项了。 您可以通过使用工具->选项->文本编辑器来更改这些功能的特性或者完全禁用这些功能。 如果要禁用Ctrl+单击转到定义这个功能以及返回到以前的行为来选择符号,只需要取消“启用鼠标点击执行去定义”复选框即可。或者,您可以将您使用的辅助按钮改成单击Alt 或者Ctrl+Alt,或者选择执行“Peek 定义”,而不是“转到定义”。它使得当前编辑器窗口打开,并显示具有定义位置的内联式弹出窗口。您可以使用“显示结构指南”复选框启用或禁用结构指南。 IDE的性能改进 我们知道Visual Studio性能是影响开发人员生产力的另一个方面,我们一直努力让它变得更好。这一次,我们集中致力于一些使用智能感知的代码导航和重构方面的工作。以下特性在15.5预览1中有显著的性能改进: 找到所有引用 重命名 更改签名 对于一些改进的可视化,下面是对Chromium工程(3500个程序)进行的测试运行:   尝试下15.5预览1版本 大多数人都在Visual Studio安装程序的发布通道中,这确保在他们不再处于预览状态后你们能获得更新。要获得最新的,最前沿的预览更新,包括15.5预览1,以及在发布的博客“订阅预览频道”中所提到的一切,您可以既安装发布版本,也安装Visual Studio2017的预览版本。这样您就可以在不耽误您当前工作的同时使用最新的部分。 我们感谢所有的反馈,这样在每一次发布的版本中,VisualStudio能变得更好。请通过产品中的帮助->发送反馈菜单向我们发送任何错误报告或建议。  

0

MSVC已经支持“Two-phase name lookup”

[原文发表地址] Two-phase name lookup support comes to MSVC [原文作者] Andrew Pardoe [MSFT] [原文发表时间] 2017/9/11 “Two-phase name lookup” 是一个非正式术语,指的是一组被用于模板声明中控制名称解析的规则。这些规则在二十年前已经被形式化,试图调和两个相反的模板编译模型:包含模型(大多数开发人员知道的模板模型)和分离模型(模板原始设计的基点)。你可以在基础论文“Proposed Revisions to the Template Specification”找到依赖名称的起源,坚定地依据一个定义原则。如果你有兴趣深究细节的话,你可以在C++17标准草案的17.6节((stable name [temp.res]))中查找这些规则。在过去的几个月,MSVC编译器还不支持“Two-phase name lookup”规则下大多数可用代码。我们将在未来的VS2017更新中去完成此功能。 你需要使用‘/permissive-’一致性开关在VS2017 15.3打开“Two-phase name lookup”功能。“Two-phase name lookup”彻底改变了一些代码的含义,因此在当前的MSVC版本中默认情况下不开启此功能。 这篇文章准确的讲了”Two-phase name lookup”意味着什么,MSVC目前实现了什么,以及如何有效地利用MSVC对“Two-phase name lookup”的支持。即使你希望你其余代码严格符合标准,我们也会告诉你如何停用此功能。最后,我们解释为什么我们花了很长时间才走到这里——这些规则至少已经是25年了。 什么是“two-phase name lookup”? C++最初模板设计意味着完全按照“模板”术语进行实现:一个模板可以压制类和函数。它允许和鼓励,但不强求提前检查非依赖名称。因此,在解析模板定义时不需要检查标识符,相反,编译器被允许延迟查找名称,直到模板被实例化。类似地,实例化之前,模板的语法不需要验证。基本上,在模板实例化时,模板中使用的名称才被确定。 按照这些原始规则, 以前版本的MSVC做了非常有限的模板解析。特别地,在实例化之前模板函数体没有被解析,编译器记录模板体为当模板需要初始化的时候被反复的令牌流,那么这个模板是可能是候选的。 我们来看看这段代码是什么意思。 链接提供给在线编译器,以便您在阅读本文时可以使用代码。 第7行调用哪一个重载函数呢?void*重载在模板定义的时候已经定义在了第5行。而函数void func(int)在模板定义时还不存在。因此,14行的模板函数void g(T x)应在第5行调用第3行的函数void func(void*)。 当编译符合标准规则时,程序输出“The call resolves to…

0

Visual Studio 2017中的C ++开发人员的Visual Studio扩展

[原文发表地址] Visual Studio extensions for C++ developers in Visual Studio 2017 [原文发表时间] 2017/8/29 在这个博客中,我们要强调几个Visual Studio扩展,如果您使用Visual Studio 2017或考虑升级,可以使您的C ++开发人员的生活更美好。我们也听说过许多人在Visual Studio 2017上没有提供某些C ++扩展,阻止您转移到最新版本。我们想通知您,我们正在解决这些反馈,您提到的许多扩展程序现在可以在Visual Studio 2017上使用。 我们很高兴地宣布,以下扩展程序现在可用于Visual Studio 2017。 扩展名 说明 C++ Quick Fixes 此扩展允许您将鼠标悬停在一个波浪上以获得LightBulb,或使用默认键盘快捷键Ctrl + Dot(Ctrl +.)来了解如何快速修复代码中的问题。 Macros for Visual Studio Macros for Visual Studio是VS的一个扩展,VS可以使用这个扩展来自动执行IDE中的重复任务。这个扩展可以记录Visual Studio中的大部分命令,包括文本编辑操作。 PdbProject 可以直接从PDB中创建一个.vcxproj以便快速的代码浏览和智能感应。 Test Adapter for Boost.Test 适配器可以自动地发现单元测试并使IDE工具可以基于Boost.Test框架运行和管理单元测试,参照测试执行结果以及Visual Studio Enterprise用户来检查代码覆盖率。 Test Adapter…

0

Visual Studio支持CMake – 包括CMake 3.9的更新,支持Linux系统已及对一些反馈的改进

[原文发表地址] CMake support in Visual Studio – CMake 3.9, Linux targeting, feedback [原文发表时间] 2017/9/14 Visual Studio 2017 15.4 Preview 2现在可用,包括对Visual Studio的CMake工具的增强。最新的预览将CMake升级到3.9版本,包括的更好地支持独立的CMakeLists,并支持直接定位Linux。 请查看预览并尝试使用最新的CMake功能。如果您刚刚开始使用CMake,请按照链接详细了解Visual Studio中的CMake支持。我们期待您的反馈。 CMake工具升级到 CMake 3.9 您可以在CMake 3.9发行说明中找到关于增强功能的完整列表。 更好地支持包含多个独立CMakeLists的文件夹 最新的预览改进了对包含多个独立CMake项目的文件夹的支持。当您打开一个独立项目的文件夹时, CMake项目中的所有目标都应该被检测到。 此功能在预览中确实有一些限制。例如,如果根文件夹中有CMakeLists,则可能无法正确检测到子文件夹中的独立CMakeLists。请让我们知道这是否会对您的项目产生负面影响。在此之前,您可以直接打开子文件夹来解决这个限制。 CMake 支持 Linux Visual Studio现在支持使用CMake直接定位Linux。 此功能允许您无需修改即可打开Linux项目,在Windows上使用完整的IntelliSense进行编辑,并在远程Linux目标上进行构建和调试。另外,Visual Studio解决了远程目标的链接问题,因此您不必担心设置SSH通道。这应该使跨平台开发变得轻而易举,因为您可以通过在下拉列表中切换配置来在Windows和Linux之间切换。如果您想了解更多信息,请查看使用CMake直接定位Linux。 错误修正和改进 你们给了我们反馈,我们听了。Visual Studio 2017 15.4预览1包含几个改进和解决社区报告的错误。 以下问题已在最新预览中修复: 无法使用CMake构建解决方案,因为无法找到生成器。 开发者社区:98850 CMakeSettings.json不能放在’.vs’文件夹中。 开发者社区:81812 无法从CMake“打开文件夹”启动/调试DLL。 开发者社区:82176 Launch.vs.json不支持正确支持环境变量。 开发者社区:81798 未设置CMAKE_VS_DEVENV_COMMAND变量。 开发者社区:75609 给我们反馈…

0