Visual Studio 对 C++ 头文件和模块的支持

在 C++ 编程领域,头文件和模块的管理有时候确实比较令人头疼。但是,有许多工具和功能可以简化此过程,提高效率并减少出错的可能性。下面是我们为 C++ 头文件和模块提供的几种工具的介绍。

构建明细

通过菜单栏 Build > Run Build Insights,可以打开构建明细窗口。

>> 请移步至 www.topomel.com 以查看图片 <<

此工具提供对“包含文件”和“包含树”视图的见解,以分析和优化 #include 使用情况。

例如,在 bullet3 示例存储库中,运行 Build Insights 显示当前项目的总生成时间为 202.812 秒。

>> 请移步至 www.topomel.com 以查看图片 <<

启用 #include 清理

接下来,启用 #include 清理功能(“工具”>“选项”>“文本编辑器”>“C/C++ > 代码清理”>“启用 #include 清理”)。

此功能有助于删除未使用的 #include 指令并添加可传递使用的头文件。
您还可以调整建议级别的严重性,以适合您的编码风格和要求。

>> 请移步至 www.topomel.com 以查看图片 <<

配置 #include 清理

您还可以使用 EditorConfig 自定义 #include 清理生成建议的方式。
您可以使用使用 .editorconfig 配置包含清理中的设置排除特定包含、指定依赖项、重新映射头文件和指定备选项。

使用 #include 清理

可以使用此功能执行下列三项任务:

> 添加可传递使用的头文件:添加间接使用的包括单独或一次性全部使用。

> 删除未使用的头文件:单独或一次性删除未使用的包含。

> 优化此文件的包含图:添加所有传递使用的 include,并删除未使用的 include,以获得优化的 include 结构。

让我们将其应用于示例存储库中的 “test_invdyn_jacobian.cpp” 文件。选择 “优化包含test_invdyn_jacobian.cpp图”

>> 请移步至 www.topomel.com 以查看图片 <<

检查构建时间优化结果

清理 “test_invdyn_jacobian.cpp” 文件后,再次运行 Build Insights,以量化清理工作的好处。
在我们的示例存储库中,总体构建时间提高到 197.76 秒。

#include 清理功能不会一次清理整个项目。但是您可以使用它来逐步改进您的项目。专注于构建时间最长的文件,您可以使用 Build Insights 找到这些文件。

清理的文件越多,项目的构建速度就越快。

>> 请移步至 www.topomel.com 以查看图片 <<

启用 #include 诊断

#include 诊断功能允许您直接在编辑器中查看头文件的使用情况和构建时间。

打开 #include 诊断

右键单击编辑器以打开上下文菜单,导航到 “#include 指令” 选项,然后选择 “打开 #include 诊断程序”,以打开 #include 诊断程序。这将在每个头文件上方显示 CodeLens,提供有关其使用情况和生成时间的信息。

在评估每个头文件的生成时间和使用情况后,您可以使用 #include 清理功能来优化头文件。

此操作可以显著缩短项目的整体生成时间。这背后的原因是,这些头文件中任何未使用的 include 指令都可能导致图在使用头文件的任何地方进行不必要的扩展。

通过删除这些,您可以有效地提高构建过程的效率。

>> 请移步至 www.topomel.com 以查看图片 <<

使用 C++20 模块

除了上述功能外,C++20 还引入了头文件单元和命名模块。

头文件单元

头文件单元充当传统头文件包含和命名模块之间的桥梁。
它们允许您将头文件作为模块导入,为传统 #include 提供了更快、更强大的替代方案。
重要的是,它们不需要对头文件进行任何更改,但需要对生成系统进行重大修改。

命名模块

命名模块提供卓越的性能和对导出内容的控制。
它们需要创建 .ixx 文件并添加导出关键字。
导入的顺序并不重要,因为它们的顺序独立性和宏观独立性。

总结

Visual Studio 持续的给广大 C++ 开发者整出 “新花样”,目的就是让你的生产力不断的提升,将宝贵的时间花在最值得的地方,点赞!
这里提到的 C++20 的模块,在 拓扑梅尔智慧办公平台 (TopomelBox) 并没有引入,一是担心这项特性实现的并不成熟,而是万一以后发生大的非兼容性变化,我这个小工程改起来,不得掉一层皮?
所以,还是老老实实使用头文件包含先把。

最后

Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《Visual Studio features for C++ Header Files and Modules》

最近我写了个东西

正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/829257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【个人博客搭建】(11)swagger添加jwt信息

这个主要是为了方便使用swagger时&#xff0c;能更好的带入我们的token。 ps&#xff1a;如果使用其他第三方api工具&#xff08;apipost、postman等&#xff09;则不需要。 &#xff08;当然&#xff0c;不用不能没有&#xff0c;是吧&#xff09; 1、在AddSwaggerGen内添加…

本地Windows主机,使用pycharm通过wsl的ubuntu来创建django项目

Windows主机在pycharm中通过wsl的ubuntu来创建django项目 需求&#xff1a;在windows主机中创建python项目再转接到linux服务器中运行&#xff0c;有点麻烦。【特别是存放日志文件或其他文件路径时需要修改为linux中的路径】 1&#xff1a;我的是windows主机 2&#xff1a;有…

工作既能造火箭又能拧螺丝

在当今职场中&#xff0c;许多求职者都会面临一个共同现象&#xff1a;“面试造火箭&#xff0c;工作拧螺丝”。这句话形象地比喻了求职过程中的一个矛盾现象&#xff1a;面试时被问及的问题异常复杂&#xff0c;似乎要求应聘者具备高超的专业技能&#xff0c;但入职后实际的工…

关于SSL加密,您应该知道什么?

SSL加密&#xff0c;全称为安全套接字层加密&#xff0c;是一种网络安全协议&#xff0c;主要用于在网络通信中提供隐私和数据完整性。它通过在客户端和服务器之间建立一个加密的通道&#xff0c;确保数据在传输过程中不被窃取或篡改。随着互联网的普及和电子商务的快速发展&am…

前端提高篇(二十四)JS进阶18对象属性的高级用法

x:1, y:2, } Object.defineProperty(obj1, ‘z’,{ value:3, writable:true, enumerable:true, configurable:true, }) for (var i in obj1){ console.log(i ’ : ’ obj1[i]); } 运行效果&#xff1a; 不可枚举时&#xff1a; var obj1 { x:1, y:2, } Obj…

学习前端二十八天(数组方法)

一、多维数组 const matrix [ [1, 2, 3], // 0 [4, 5, 6], // 1 [7, 8, 9]&#xff0c;// 2 ] console.log(matrix[1][2]); // 6 访问矩阵数组的每个值&#xff1a; for (let v1 of matrix) { for (let v2 of v1) { console.log(v2); } }; // 1,2,3,4,5,6,7,8,9 二、转为…

windows Jenkins运行python+selenium打开浏览器一直无响应,运行中,还没有打开浏览器

一开始解决办法是把打开服务把Jenkins给禁用了 但是没有用&#xff0c;然后找到安装目录 C:\Program Files\Jenkins 在这个路径下&#xff0c;在地址栏输入cmd打开命令窗口运行Jenkins启动命令 java -jar jenkins.war --httpPort8080 打开浏览器进入链接 http://localhost:…

使用工具速记

文章目录 一、sqlyoy登录账号信息迁移二、idea导入之前的已配置的idea信息三、设置windows UI大小四、其他 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、sqlyoy登录账号信息迁移 工具(sqlyog上面菜单栏)->导入导出详情->选择要导出的账号…

Centos/linux根目录扩容、分区、挂载。LVM、物理卷、逻辑卷

前言    &#xff08;空格&#xff09; &#xff1a;分区挂载和扩容是两码事 每个Linux使用者在安装Linux时都会遇到这样的困境&#xff1a;在为系统分区时&#xff0c;如何精确评估和分配各个硬盘分区的容量&#xff0c;因为系统管理员不但要考虑到当前某个分区需要的容量&a…

你的网站还在使用HTTP? 免费升级至HTTPS吧

如果您的网站还在使用老的http协议&#xff0c;可以申请一个免费的SSL证书升级至https&#xff01; 具体步骤如下&#xff1a; 1 申请免费SSL证书 根据你的需求选择合适的SSL证书类型&#xff0c;如单域名证书&#xff0c;多域名证书、通配符证书 登录免费供应商JoySSL官网&…

施耐德 Unity Pro 编程软件导入导出变量

适用范围 施耐德中高端PLC&#xff0c;使用的编程软件为 UnityPro &#xff08;最新版更名为 Ecostructure Control Expert&#xff09; 中端 PLC&#xff1a;Premium&#xff0c;M340高端 PLC&#xff1a;Quantum&#xff0c;M580 导出/导入变量 导出变量可导出【变量和 FB…

Python项目开发实战:如何解决银行账户资金交易

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:Python项目开发实战_银行账户资金交易_编程案例解析实例详解课程教程.pdf 1、特点 在Python项目开发实战中,银行账户资金交易系统是一个重要且复杂的…

Linux已安装virtualenv 但还是报 bash: virtualenv: command not found 错误原因及解决

场景 在 linux 上已经安装了python和 virtualenv &#xff0c;但是直接执行 virtualenv 相关的指令创建虚拟环境还是失败并且报错 bash: virtualenv: command not found 原因 虽然手动安装了virtualenv 没有自动配置 virtualenv 的软连接 解决方式 手动在安装目录下去执行…

简单搭建一下证书透明度服务(certificate transparency)

ct服务搭建流程参照官网: https://github.com/google/certificate-transparency-go/blob/master/trillian/docs/ManualDeployment.md 1. 创建数据库(mysql) 需要数据库支持用户无密码登录(因为启动参数上面没有找到设置数据库 密码的参数)设置无密码登录 进入mysql mysql -ur…

表情识别 | LBP+SVM实现脸部动态特征的人脸表情识别程序(Matlab)

表情识别 | LBPSVM实现脸部动态特征的人脸表情识别程序&#xff08;Matlab&#xff09; 目录 表情识别 | LBPSVM实现脸部动态特征的人脸表情识别程序&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1 运行环境 程序运行在Windows系统下&am…

微信小程序:11.本地生活小程序制作

开发工具&#xff1a; 微信开发者工具apifox进行创先Mock 项目初始化 新建小程序项目输入ID选择不使用云开发&#xff0c;js传统模版在project.private.config中setting配置项中配置checkinalidKey&#xff1a;false 梳理项目结构 因为该项目有三个tabbar所以我们要创建三…

【Jenkins】持续集成与交付 (六):Gitlab代码托管服务安装

【Jenkins】持续集成与交付 (六):Gitlab代码托管服务安装 一、Gitlab安装1.1 安装相关依赖1.2 启动SSH服务并设置为开机启动1.3 设置Postfix开机自启并启动1.4 开放SSH和HTTP服务,并重新加载防火墙列表1.5 下载GitLab包并安装1.6 修改GitLab配置1.7 重载配置及启动GitLab1.…

百种提权及手段一览系列第10集

特权升级的危险是显而易见的。通过提升权限&#xff0c;攻击者可以绕过网络安全措施&#xff0c;从而损害数据完整性、机密性和系统可用性。对于组织而言&#xff0c;这可能会导致数据泄露、系统停机以及潜在的法律和声誉后果。识别权限升级的迹象并部署预防性网络安全措施对于…

【01-机器学习入门:理解Scikit-learn与Python的关系】

文章目录 前言Python与机器学习Scikit-learn简介Scikit-learn与Python的关系使用Scikit-learn进行机器学习结语 前言 在当今的数据科学和人工智能领域&#xff0c;机器学习已经成为了一个不可或缺的组成部分。而对于那些刚刚踏入这一领域的新手来说&#xff0c;理解机器学习的基…

HTTP网络协议的请求方法,具体详解(2024-04-26)

1、HTTP 即超文本传输协议&#xff0c;是一种实现客户端和服务器之间通信的响应协议&#xff0c;它是用作客户端和服务器之间的请求 根据 HTTP 标准&#xff0c;HTTP 请求可以使用多种请求方法。 2、方法分类 HTTP1.0 定义了三种请求方法&#xff1a; GET, POST 和 HEAD 方…