Visual Studio Code C/C++ 扩展2017年6月份的更新

[原文发表地址] Visual Studio Code C/C++ extension June 2017 Update [原文发表时间] 2017/06/27 今天我们很激动地宣布发布2017年六月份更新的版本Visual Studio Code C/C++ 扩展。这次更新可以自动完成语义感知成员列表并提高了整体默认智能感应的行为,提供了更流畅的开箱即用智能感应体验。 如果你之前还没有试用过VS Code,你可以先下载VS Code(Stable build)或者是 VS Code Insiders。然后再下载Visual Studio Code C/C++ 扩展并尝试使用。如果你已经安装了此扩展程序,VS Code将通知你更新并自动安装。 提供此扩展概述的原始博客文章Visual Studio Code C/C++ 扩展已经通过这些更改进行了更新。 改善智能感应体验 在上个月的更新中,我们增强了原始标签解析器智能感应引擎的操作,这个引擎通常对使用新的更强大的语义引擎编辑功能提供“模糊”查询结果。这种新的引擎提供了更高效的语言服务功能的能力。与5月更新一样,这种新的引擎仅仅被默认使用在VS Code Insiders中。然而,我们鼓励大家尝试在你的settings.json文件中将” C_Cpp.intelliSenseEngine”的值由”Tag Parser”改为”Default”。 在更新你的includePath来查找所有头文件之后,新的智能感应引擎将会为类/结构体/命名空间成员,快速信息工具提示和错误曲线提供更加准确的自动填充建议。新的智能引擎尽可能地被用作默认值。在引擎返回错误的情况下,扩展将会动态地返回到标签解析器来作用打开的文件。查看下面的”回退如何工作以及如何控制行为”来获得更多的信息。 成员列表自动填充 与标签解析器不同,新的语义引擎可以确定类型,因此在当你输入”.”,”->”或者是”::” 时提供更加简洁准确的完成项列表。 请注意,在输入“::”时,或者在没有提供范围字符时提供快速建议时,在全局范围内不启用此功能。标签解析器继续为这两种情况提供建议。 IntelliSenseMode设置 在5月份的更新中,语义引擎限制在Windows上的”MSVC mode”下编译代码以及在Linux和Mac上的”Clang/GCC mode”下编译代码。在这次的更新中,我们添加了一个设置,可以让你选择使用哪种模式来编译代码而不管你正在运行的平台。 例如,如果你正在windows平台上使用MinGW,你现在可以指示智能感应引擎使用“Clang/GCC mode”而不是“MSVC mode”。可以通过修改c_cpp_properties.json文件中活动配置中的“intelliSenseMode”属性来配置该模式。 如何返回之前的智能引擎工作及如何控制行为 此次的扩展程序首次尝试使用新的智能感应引擎来解析所有打开的文件。如果它发现自己找不到头文件或是依赖关系,它将会返回到标签解析器并提供原始的模糊智能感应行为。这个返回会影响完整的翻译单元而不仅仅是单个打开的文件。其他打开的TUs将继续使用新的智能感应引擎,在这个引擎中所有的#include依赖关系都可以被解决。这个设计有效地解决了“sea of red…

0

在Visual C++中使用CMake进行Linux开发

[原文发表地址] Visual C++ for Linux Development with CMake [原文发表时间] 2017/08/25 在Visual Studio 2017 15.4中,你现在可以从CMake项目中定位Linux。这使你可以使用现有的代码库,使用CMake作为构建解决方案而无需将其转化为VS项目。如果你的代码库是跨平台的则可以从Visual Studio中定位Windows和Linux。   本文会对Visual Studio中的CMake支持Linux做一个概述。如果你刚开始接触CMake你可以查看这篇博客Visual Studio中CMake的概述。 开始 要启用这个功能,请确保在Visual Studio installer 页面上选上Linux development C++ Workload。当你选上这个Workload后,Visual C++ tools for CMake and Linux组件就会被默认选上。Visual Studio中的CMake支持需要在CMake 3.8中引入的服务器模式支持。如果你的包管理器提供的是较旧版本,请查阅从源代码构建CMake的说明。 开始使用此功能,在与cpp文件相同的文件夹中创建一个简单的CMakeLists.txt文件,如下所示。(通过File>Open>Folder…或者devenv.exe<foldername>打开文件夹)。 Hello.cpp #include <iostream>; int main(int argc, char* argv[]) {     std::cout << “Hello” << std::endl; } CMakeLists.txt project (hello-cmake) add_executable(hello-cmake…

0

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

[原文发表地址] Visual Studio Code C/C++ extension August 2017 Update [原文发表时间] 2017/08/22 上周我们2017年8月的更新发布到Visual Studio Code C/C++ 扩展。除了修复了几个问题,此更新还包括一个新的可以重置智能感应数据库文件命令,并继续改进到新的基于编译器的智能感应引擎。感谢所有在过去几个月内为我们提供关于新的智能感应引擎反馈意见的人! “Reset IntelliSense Database”命令 扩展发布的“Tag Parser”,用于为某些智能感应功能提供快速但“模糊”的查询结果。它还被用作由基于新的基于编译器的智能感应引擎提供的其他智能感应功能的后备解决方案,例如快速信息工具提示,错误曲线和类/结构/命名空间成员的自动完成。标签解析器从源文件构建符号数据库,并将数据库文件(.BROWSE.VC.DB)存储在您在VS Code中打开的每个文件夹的磁盘上。 但是,当符号所在的路径从browse.path设置中删除后,标记解析器目前不会自动从数据库中删除符号。随着一些无关符号信息被遗留在数据库中,一些智能感应和代码浏览功能可能会提供不太精确的结果。例如,“Go to definition”可能会导航到一个无关的符号。我们正在努力使数据库始终与browse.path设置引用的符号相匹配,但在此期间,你如果遇到这种情况,一种恢复方法是清理数据库文件,允许它再次构建。在这个更新中,我们添加了一条新的命令“Reset IntelliSense Database”,这个命令可以在磁盘上找到数据库文件,然后删除它,再重新构建一个新的。您可以通过命令面板访问命令,如下屏幕截图所示。 请注意,该命令目前可以重置的数据库文件仅是在VS Code中第一次打开的文件夹。如果您使用VS Code Insiders构建,这将允许您在VS Code中打开多个文件夹,但该命令不会清除任何随后打开的文件夹。我们将在以后的更新中添加对多个文件夹的支持。 新的智能感应体验 在4月份首次发布的新的智能感应体验在VS Code Insiders作为默认设置,并且根据过去几个月收到的反馈(感谢所有向我们发送反馈的人们),已经大大改善了这个功能。现在我们觉得这是一个很好的时机,逐渐对更多用户将这个功能设置为默认功能。新的智能感应引擎是与Visual Studio中多年来为C++智能感应和代码浏览功能提供支持的引擎相同的。对于VS Code,到目前为止,我们已经使用新引擎实现了几个智能感应功能,包括针对类/结构/命名空间成员的自动完成建议,快速信息工具提示和错误曲线(语言分析)。这些功能现在可以提供比基于标签的智能感应更好、更准确的结果。您可以通过查看settings.json文件中的“C_Cpp.intelliSenseEngine”设置值(从菜单File->Preferences->Settings打开)来查看使用的智能感应引擎。将值更改为“默认”将为您提供全新的智能感应体验。我们鼓励大家尝试一下,让我们知道您的想法。随着我们新的智能感应引擎推出更多的功能您的反馈将有助于我们塑造功能。 此次扩展允许新的智能感应体验首先尝试使用新的智能感应引擎完全解析所有已打开的文件。如果它发现找不到头文件或依赖关系,它将返回到标签解析器,并提供原始的模糊智能感应行为。博客Visual Studio Code C/C++ 扩展2017年6月更新中详细介绍了后备行为如何工作以及如何控制它。 告诉我们你的想法 我们鼓励大家尝试新的智能感应并向我们发送反馈。 下载Visual Studio Code 的C/C ++扩展,尝试一下,让我们知道你的想法。关于GitHub的文件问题和建议。 如果您还没有提供反馈意见,请参加这项快速调查,以帮助我们根据您的需求制定这一扩展。

0

出差报告:关于在多伦多夏季ISO C++ 标准会议的进展

[原文发表地址] Trip report: Evolution Working Group at the Summer ISO C++ standards meeting (Toronto) [原文作者] Andrew Pardoe [原文发表时间] 2017/7/28 2017夏季ISO C++ 标准会议在7月10号到15号在多伦多大学如期举行。非常感谢Google, Codeplay 和IBM对本次会议的赞助,以及来自Mozilla,CollègeLionel-Groulx,Christie Digital Systems和Apple的帮助与组织。 当然,我们也非常感谢海滨国际在加拿大国家电视塔举办宴会。 今年在多伦多,我们有一个很有成效且相当和谐的发展工作组(EWG)。在五天三夜的会议上我们讨论了45个提案,其中周二晚上的Concepts和关于SG7的会议都是关于反思和编程研究小组的联合会议。我们大多数的人也参加了周一晚上关于P684R0, C++稳定性,速度和部署计划的会议。 C++标准委员会非常辛苦的工作,每天上午下午四小时的小型工作组讨论(如EWG)而且还要在晚上深入讨论一个课题几个小时。周六全球有约120位来自世界各地的专家参加此次闭幕会议。因为WG21成员在会议举行期间做了很多工作,所以一切都很顺利的进行。小组主席,论文作者和所有的参会人员阅读了大量的论文,并且在演讲之前做了很多讨论。在这里会议里我们做了大量的工作来改进提案:在第一次的演讲中几乎没有重要的提案被接受,正如WG21召集者Herb Sutter说”顺利的事不会偶然发生”。如果你希望事情顺利进行,那么你必须提前做好准备。 这里有每个人从第一次到有经验的参与者的许多在线出差报告。这次报告非常的集中,主要专注于EWG,在那里我是工作组的抄写员。主要把时间花在缮写上。这份报告旨在概述EWG在多伦多的工作情况,而不是对C++标准工作组进展的记录。 为所有的论文提供链接。连接服务器自动转到论文的最新版本,而不一定是当时在多伦多讨论的版本,如果你查看的论文版本较高的话(如:PxxxxR1 而不是 PxxxxR0),那应该是收纳了来自多伦多讨论的反馈之后的版本。 Concepts技术规范合并到草案标准 多伦多会议上最大的消息就是我们把Concepts TS 合并到了C++20草案标准中。这次演讲用一个马拉松式的环节把会议推向了高潮,移除了模板导入语法和“自然语法”。此提案P0696R0阐述的目标移除Concepts语法中有争议的部分,以便我们可以将TS成功合并到标准草案中。 自然语法(也称为“缩写”或“简写”语法)的主要观点是它支持泛型编程。特别是Stepanov风格的泛型编程。重在使用而不是语言本身。简化语言的使用促进良好的编程风格和规范。 经过多番讨论,小组投票删除了这两个语法,需要注意的是我们将在以后添加自然语法。提出的例子就是时候事实上我们没有包含泛型的Lambdas当我们引入Lambdas,并且引入C++11的constexpr的重大扩展。EWG致力于在未来的会议提案中提供缩写语法,理想情况下C++20完成之前。 我们就Concepts这个话题讨论了六次,这些讨论按时间顺序列出,稍后的讨论可以部分的覆盖先前讨论的决定。 Richard Smith(工作草案项目编辑) 和Andrew Sutton(Concepts TS 的项目编辑)提交了两篇论文,每篇文章都得到了强有力的支持。 P0717R0:该提案简化了两个约束是否相等的规则。在以前,实现必须逐个比较相等的Concepts。 P0716R0:在2017年2月的会议之前,我们有两种Concepts的写法:一种是函数,一种是变量,该提案统一了Concepts的语法定义。具体来说,它删除了关键字bool 和其它复杂的变量声明语法。 P0691R0:列出了Concepts TS 当前的问题。我们仅仅扑捉到了问题21:需要括号内的requires 语句来帮助解析requires (bool(T())). P0694R0:本文是Bjarne…

0

使用MinGW和Cygwin在Visual C ++中 以及打开文件夹

[原文发表地址] Using MinGW and Cygwin with Visual C++ and Open Folder [原文发表时间] 2017/07/19 使用Visual Studio 15.3预览版4构建跨平台C和C ++代码比以往任何时候都更加简单。最新的预览改进了对替代编译器的支持,并构建了MinGW和Cygwin等环境MinGW(Windows的Minimalist GNU)。如果您不熟悉它,它是GCC系列中旨在Windows上本机运行的编译器。 如果您有兴趣快速了解这项新功能,请查看我们最新的9频道GoingNative剧集。 然而,大多数MinGW安装不仅仅包括一个编译器。 MinGW的大多数发行版都包含了许多其他工具,可用于熟悉的GNU工具集在Windows上构建和组装软件。 MinGW构建环境通常包含一个完整的POSIX开发环境,可用于使用POSIX构建工具和POSIX软件开发本地Windows软件,该软件可在仿真层的帮助下运行在Windows上。 请下载预览并尝试最新的C ++功能。 您还需要确保除了Desktop C ++之外,还要安装用于C ++工作负载的Linux Tools以使用这些新功能。 您可以在Microsoft文档网站上了解有关打开文件夹的更多信息。 我们期待您的反馈。 为什么是MinGW 这里有您希望在Windows使用MinGW的三个原因。 第一个是简单的编译器兼容性。 我们都喜欢MSVC,但现实是,一些代码库是从根本上设计的,期望它们将与GCC一起构建。 对于许多跨平台项目尤其如此。 移植这些代码库以支持MSVC可能代价昂贵,当您想要起动并且运行您的代码。 使用MinGW,您可以在几分钟启动并运行而不是几天。 然而,使用MinGW源代码兼容性相比于GCC更为引人注目。 MinGW环境不仅仅是编译器,而是包括整个POSIX构建环境。 这些开发环境允许跨平台项目在Windows上构建,而对其构建逻辑的修改很少。 需要Make或AutoTools,它已经安装 – 如果您使用像MSYS2这样的每个工具环境,你可能需要的只是一个单独的软件包管理命令。 最后,一些MinGW发行版(如MSYS2)允许您在Windows上构建本机POSIX软件,而无需将代码移植到Win32中。 这是通过允许本机POSIX工具在Windows上运行的仿真层来实现的。 同样的层是让您最喜爱的POSIX构建工具在MinGW环境中运行。 在Windows上安装MinGW 一旦安装最新的Visual Studio Preview后MinGW的入门就很简单。 首先,您需要确保在安装Visual Studio时选择C ++工作负载。 接下来,您将需要下载MinGW。…

0

Visual Studio中支持CMake:自定义环境

[原文发表地址] CMake Support in Visual Studio: Customizing your Environment [原文发表时间] 2017/07/18 在Visual Studio 15.3中,有一些新的方法可以将高级配置应用于你的CMake环境中。 请下载最新的VS,并尝试最新的CMake功能。如果你刚刚开始使用CMake,请按照链接详细了解CMake support in Visual Studio。我们期待你的反馈。 CMakeSettings.json文件中的新功能 这个新的灵活性的核心在于项目的CMakeSettings.json文件中,它源自两个新概念: 全局或每个配置具有继承一组默认的环境变量的能力; 全局或每个配置具有定义环境变量及其值的能力。 我们先来看一下如何使用这个功能的例子: { // The “environments” property is an array of key value pairs of the form // { “EnvVar1”: “Value1”, “EnvVar2”: “Value2” } “environments”: [ { “BuildDir”: “${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build”, } ], “configurations”: […

0

2017年7月Visual Studio Code C/C++ 扩展的更新 –尝 试新的智能感应的时刻到啦!

[原文发表地址] Visual Studio Code C/C++ extension July 2017 Update – time to try out the new IntelliSense! [原文发表时间] 2017/07/18 200万次的下载量!4个月前我们才刚刚达到100万次,所以200万对于Visual Studio Code C/C++扩展来说,这真的是一个特别令人兴奋的消息。 今天,我们发布了2017年7月的更新到这个扩展中,除了修复一些bug外,我们还基于上个月的发布对新的智能感应体验功能做了一些改进。在默认情况下,这种新体验不会为所有人打开而只会为VS Code Insiders打开。但是我们鼓励所有人尝试使用这个新功能,并且帮助我们来一起改进新的智能感应体验! 我们已经改进了多个智能感应功能,以便让您获得更准确的结果,包括对类/结构体/命名空间成员自动完成的建议,快速提示信息和错误曲线(linting),所有这些都将由一个新的语义引擎来提供。你可以像下面的截图所展示的一样通过在settings.json (打开文件菜单->首选项->设置) 文件中把“C_Cpp.intelliSenseEngine”的值从 “Tag Parser”改为”Default”来打开新的智能感应功能。 下面的截图是通过新的智能感应引擎来完成一个类的建议和快速提示信息。 该扩展使得新的智能感应体验首先尝试使用新的智能感应引擎来解析所有打开的文件, 如果它发现找不到头文件或者相应的依赖关系,就会返回到标签解析器,并提供最初的模糊智能感应行为。这篇博客文章 Visual Studio Code C/C++ 扩展2017年7月的更新 详细介绍了回退是如何工作的以及如果控制它。 告诉我们你的想法 我们鼓励每一个人尝试新的智能感应功能,并且给我们反馈。在这里下载Visual Studio Code关于C/C++的扩展,尝试使用它并把你的想法告诉我们。您可以 在Github上提交您的问题或建议。 如果你还没有提供任何反馈给我们,请你做下这个快速调查以帮我们能够开发出你所需要的扩展功能。

0

C++ 教程:Hello world

原文发表地址:C++ Tutorial: Hello World 原文发表时间:2015/6/17 欢迎来到C++教程。 在第一个C++教程中,您将学习到如何编写(并运行)你的第一个C++程序 “Hello word!”。在学习的路途中您将学习一些C++的历史,请参阅如何在Visual Studio 2017中配置C++控制台应用程序,了解代码结构以及如何构建代码。 致谢  本系列教程是C++:通用语言和库的启动混合版本,由Kate Gregory和James McNellis提供的全天课程并托管在Microsoft虚拟学院上,该内容作为Edx初级和中级课程的演变由Gerry O’Brien结合起来,这些课程已经被成千上万的开发人员用来了解更多关于C++的信息. 原始的内容已经适应了文章格式,代码已经迁移到Visual Studio 2017 ,并将利用Visual Studio 2017 中的C++开发人员的好东西。屏幕截图 和其他内容将来自Visual Studio 2017。代码已更改来反应有关正确性,代码的风格或者适当用途的先进的观点。 先决条件 我们有大量的资源提供给初级和有经验的C++开发人员,我们推荐Lippman,Lajoie和Moo的C++ Primer第五版。它使用现代结构而不会重新审视过去更好的旧技术。 访问isocpp.org获取有用的资源列表,最新的C ++新闻,以及互联网上有趣内容的指针。 你不需要C或C++的经验,如果您在长时间休息后返回C++,欢迎回来。 本教程将以实际操作和编码为导向,所以跟上我们的脚步吧! 您可以使用Visual Studio社区,这是一个功能齐全的可扩展的免费IDE用于在Windows,Linux和其他平台的C ++中创建现代应用程序。 您还可以在Visual Studio中使用不同的编译器,如GCC和Clang。 C++ 简史 由Bjarne Stroustrup设计,C ++已经存在超过三十多年。 类的概念和C语言一样诞生于1979年,它保留了C的向后兼容性并且改进数据抽象和支持面向对象编程和通用编程。 C和C ++是受欢迎的因为它们是便携式的可以在不同的编译器或不同的计算机硬件操作系统,CPU架构或设备形式因素的情况下进行编译,而不会发生重大变化。 每个平台或操作系统可能具有不同的提供程序可用的编译器,如Microsoft,Intel或开源社区。 C ++不断发展以适应现代开发人员的需求。 C ++存在于标准委员会的管理下,并于1998年成为国际标准,并在2011年,2014年和2017年进行了修订。它继续进行更新并作为标准委员会工作的一部分。 C++已被用于成千上万的应用程序,如今你也许已经通过很多形式使用它! 创建一个空的控制台工程 学习C ++时遇到的大部分代码都可以在控制台窗口通过使用简单的文本输入和直接的文本输出来运行。…

0

使用带有Boost C++ 类库的C++ 协同程序

原文发表地址:using C++ Coroutines with Boost C++ Libraries 原文发表时间:2017/5/19 上个月,Jim Springfield 写了一篇关于在Libuv中使用C++ 协同程序的文章(一个用于异步I/O的多平台C类库)。本月我们将介绍如何使用Boost C++ 类库的组件协同工作,即boost::future和boost::asio。 获得Boost 如果你已经安装了boost,你可以跳过这一步。如果还没有安装,建议你使用vcpkg快速地在你的电脑上安装boost。你可以按照如下指令获取vcpkg 然后输入如下命令行安装32位或者64位的boost版本: .\vcpkg install boost boost:x64-windows 为了确保安装正确,请打开VS并且创建一个C++ Win控制台程序: 当你运行程序时,它应该打印出42。 Boost::Future: 协同程序部分 当编译器在处理一个函数中的co_await, co_yield 或者co_return时,它将这个函数视为协同程序。就C++本身来说,它并没有C++协同程序语义的含义,用户或者类库编写者需要提供一个std::experimental::coroutine_traits模板特例化去告诉编译器应该做什么。(编译器通过传递返回值的类型和所有传递给函数的参数的类型)。 我们希望能够编写协同程序以返回boost::future。为了做到这些,我们将按照以下方式特例化coroutine_traits: 当协同程序暂停时,需要返回一个可以满足当协程程序运行到结束或者结束时返回异常的future。 成员函数promise_type::get_return_object解释了怎么获取一个能够连接到特定实例的协同程序的future。成员函数promise_type::set_exception说明了如果在协同程序中发生了未处理的异常时会发生什么。在我们的示例中,我们希望把异常存储在与我们从协同程序中返回的future连接着的promise中。 成员函数promise_type::return_void 说明了当执行到co_return语句或者控制流运行到协同程序末尾的时候会发生什么。 成员函数initial_suspend和final_suspend,正如我们定义的那样,告诉编译器,在它被调用后并且我们要立即开始执行协同程序并且一旦运行完就销毁协同程序。 为了控制非空futures,定义boost::future的特例化任意类型: 注意在这种情况下我们定义了return_value,和前边的例子中的return_void不同。它告诉编译器我们期望一个协同程序最终返回一些非空值(通过一个co_return语句)并且这些值将会被传递到与该协同程序相关联的future。(这两个专门化之间有很多常见的代码;如果需要的话它可以被分离出来)。 现在我们准备好要测试了。在命令行选项增加编译选项“/await”以便启用协同程序在编译器中的支持(因为协同程序还不是C++标准的一部分,所以需要明确的选择性加入去启用它们)。 另外,添加一个支持协同程序的include文件, 这些文件主要定义了std::experimental::coroutine中对我们比较重要的实例化模板: 当程序运行时,它应该打印:“Hi”和42。 Boost::Future: Await部分 下一步是向编译器解释如果你想在boost::future尝试‘await’该怎么做。 给出一个需要await的表达式,编译器需要知道三件事: 准备好了吗? 如果准备好了,怎么获得结果? 如果没有准备好,怎么预定能够当它准备好时得到通知? 为了得到这些问题的答案,编译器会寻找三个成员函数:await_ready能够返回‘true’或者‘false’,当表达式准备好获得结果时编译器将会调用await_resume(调用await_resume的结果会成为整个await表达式的结果),并且最终,编译器会调用await_suspend()函数以便当结果准备就绪时得到通知。并且会传递一个用于恢复或者销毁协同程序的协同程序句柄。 在boost::future的情况下,它有给出答案的功能,但是它没有像上一段描述的那样的必须的成员函数。为了解决这个问题,我们可以定义一个可以把boost::future有的转化为编译器想要的东西的运算符co_await。 在这种情况下,当future准备就绪时,协同程序会通过await_suspend绕过暂停并且立即通过await_resume获得结果。 根据应用,有一种最为有效的方法。比如你正在编写一个客户端应用程序,当future已经准备好了的时候你的程序自然会运行的比较快一点,你免去了暂停之后由boost::future 协同函数所产生的时间消耗。。在服务器应用程序中,随着你的服务器处理数成百个同步请求,当它接收请求时,如果协同程序依据公平准则被启动, 那么处理请求需要的响应时间是可以被预测的, 这将会意义重大。…

0

Microsoft Visual C++ 中的安全功能

Microsoft Visual C++ 中的安全功能 发表时间:2017年6月28日,作者:Andrew Pardoe [MSFT],原文链接:Security Features in Microsoft Visual C++ 每一个开发者都会犯一些错误。无论编写代码时多么小心,您将总是会出现一些错误。并且当运行在连接环境中的软件或者早于其最初计划的寿命使用的软件时,任何错误都可能成为安全漏洞。 不正确的代码是不安全的代码。        Microsoft Visual C++ 工具集提供了大量的可以帮助你写出安全的、正确的代码的功能,在您开始输入代码之前编写安全到你发布代码给用户。        有关MSAVC工具集中特定安全功能的更多信息,请您确保查看 C++的安全最佳实践。   在编写代码之前      在您编写第一行代码,代码安全就开始了。编译器工具集不能显示可能导致安全漏洞的设计缺陷,但打印和在线可以使用许多资源,以帮助您思考潜在漏洞以及如何安全地设计代码。 例如,几乎每个曾经在微软的人都读过Michael Howard和David LeBlanc的“写作安全代码”。 它是非常重要的,在您编写代码时使用现代的C++构建去管理和访问资源。C++可用的资源利用是C++ 核心指南,一套针对C++ 编写的经过验证的准则,规则还有最好的实践。C++核心指南中推荐的编码实践可以帮助您编写出简单的、更现代化的软件。这样做的话,您将避免常见的陷阱,例如整数溢出或者缓冲区溢出,从而使您的代码更加安全。许多C++核心指南可以使用VisualC++附带的静态分析工具执行。 编写代码时    当您编写代码的时候你可以做些什么来帮助你自己呢?首先,通过设置正确的警告级别,从内置的编译器诊断中获取到所有可用的值。在构建代码之后运行代码分析,让编译器工具集深入分析您的代码。并且不要忘记和您的团队定期进行代码审查。 编译器警告 最常用的功能就是编译器警告。MSVC 编译器提供很多开关,允许您控制在代码中看到的警告,以及它们作为信息性消息还是导致您编译失败。 一些编译器警告默认是保持在默认状态,因为它们在您的旧代码中频繁的出现,但大部分被用户都不想看见它们。但是这些警告有许多显示的是您程序中的真实错误。例如,你的代码可能有一个合法的理由比较一个无符号值和一个负数,但它可能是一个错误。通过启用默认值以外的警告,您可以捕获到很多潜在的错误。 要了解有关如何调整构建设置以允许编译器尽可能多地在代码中查找错误的更多信息,您可以参照编译器警告级别选项的文档。 静态代码分析安全功能 我们总是写关于C++ 代码分析的博客,同时我们也让您更新有关CPPCoreCheck扩展的更新,该扩展检查您的代码是否从C++核心准则导出的规则。但是您是否知道,微软长期以来一直将PREfast作为我们的代码分析核心的引擎,一个安全工具? 该工具最初由一个专注于软件卓越的团队开发,后来由Secure Development Lifecycle团队拥有,之后才能使C ++团队进入所有版本的Visual Studio。 我们现在有一些基于PREfast引擎的代码分析工具,包括我们的基础/分析规则,ESPC并发检查器(pdf)和CppCoreCheckers。 我们也在寻找方法来帮助您将代码分析更深入地整合到您的日常开发中。 顾名思义,代码分析对您的代码进行了更深入的分析,以找出可能的错误。 当编译器检测到代码中的许多潜在错误时,代码分析会查看整个函数来确定是否存在可能导致错误的代码路径。 我们称这种分析为“路径敏感”分析。 虽然编译器可以做很多路径敏感的分析,但是有很多情况下它无法识别。 例如,打开(/…

0