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)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uni-app中配置自定义条件编译

前提&#xff1a;官网提供的自定义编译不满足条件 package.json | uni-app官网 下文&#xff1a;不详细写&#xff0c;主要写关键思路 package.json文件 主要看scripts的执行命令&#xff0c;其他依赖就是用vue-cli方式创建uni-app项目生成的 {"name": "un…

命令行启动pytest自动化程序时,程序卡住不动了,不继续往下执行了

一、问题描述 在执行pytestallure自动化测试工具的时候&#xff0c;命令行启动程序时&#xff0c;程序卡住不继续往下执行&#xff0c;如下图所示。 代码主函数如下&#xff1a; 二、解决方法 测试客户项目时遇到2次此类问题&#xff0c;2次问题原因不一样。 原因一&#xf…

3d合并的模型为什么没有模型---模大狮模型网

在3D建模中&#xff0c;合并模型是常见的操作&#xff0c;它可以将多个模型合并成一个整体。然而&#xff0c;有时候在合并后却发现部分模型消失了&#xff0c;这可能会让人感到困惑和失望。本文将探讨为什么合并的3D模型中会出现没有模型的情况&#xff0c;并提供一些解决方法…

API和微服务设计的优化方式有哪些?

在构建响应迅速、用户体验良好的应用程序中&#xff0c;API性能的优化至关重要。在构建高性能的API时&#xff0c;采取综合策略是至关重要的。通过采用一系列策略&#xff0c;我们可以确保API在处理请求时高效运行&#xff0c;提供流畅的服务。 一、API和微服务设计的优化可以…

Edge下载文件提示无法安全下载的解决方法

问题描述&#xff1a;最近Edge在下载文件时总是提示&#xff1a;无法安全下载&#xff0c;本文记录一下解决方法。 提示截图&#xff1a; 解决方式一&#xff1a; 1. 点击下图红框的三个点&#xff0c;选择保留 2. 选择仍然保留 解决方式二&#xff1a; 第一种方式每下载一次…

MySQL双层游标嵌套循环方法

文章目录 1、需求描述2、思路3、创建存储过程 1、需求描述 1、在项目中&#xff0c;需要将A表中主键id&#xff0c;逐个取出&#xff0c;作为条件&#xff0c;在B表中去逐一查询&#xff0c;将B表查询到的结果集&#xff08;A表B表关系&#xff1a;一对多&#xff09;&#xf…

Qt下使用OpenCV截取图像并在QtableWidget表格上显示

文章目录 前言一、在QLabel上显示图片并绘制矩形框二、保存矩形框数据为CSV文件三、保存截取图像四、将截取图像填充到表格五、图形视图框架显示图像六、示例完整代码总结 前言 本文主要讲述了在Qt下使用OpenCV截取绘制的矩形框图像&#xff0c;并将矩形框数据保存为CSV文件&a…

【经验分享】MySQL集群部署一:主从模式

目录 前言一、基本介绍1.1、概念1.2、执行流程 二、部署2.1、通用配置2.2、主节点配置2.3、从节点配置2.4、主从测试2.5、谈一谈主节点历史数据同步问题 前言 MySQL的部署模式常见的包括以下几种&#xff1a; 独立服务器部署主从复制部署高可用性集群&#xff08;HA&#xff…

Angular创建项目

Angular创建项目 文章目录 Angular创建项目1. 创建项目1.1 直接安装1.2 跳过npm i安装 2. 运行程序 1. 创建项目 ng new 项目名称 1.1 直接安装 ng new angulardemo --同时会安装依赖包&#xff0c;执行的命令就是npm i 1.2 跳过npm i安装 ng new angulardemo --skip-inst…

【数据结构7-2】-二叉排序树(建立、遍历、查找、增加、删除)

目录 1 基础说明2 基本思路-二叉树的创建和插入2.1 节点存储结构的建立2.2 二叉树创建函数的设计2.3 二叉树插入函数的设计2.4 简单的进行二叉树的检测看看插入的对不对&#xff1a;2.5 整体代码&#xff1a; 3 二叉树的遍历3.1 中序遍历3.2 程序代码&#xff1a;3.3 程序结果&…

RFID技术引领3C手机镜头模组产线智能化转型

RFID技术引领3C手机镜头模组产线智能化转型 应用背景 随着智能手机市场的快速发展与技术创新&#xff0c;手机镜头模组作为影像功能的核心组件&#xff0c;其生产精度、效率及供应链管理的重要性日益凸显。面对复杂多变的市场需求、严格的品质要求以及激烈的市场竞争&#xf…

MySQL数据库总结

作者&#xff1a;爱塔居-CSDN博客 专栏&#xff1a;数据库 目录 前言 一、数据库操作 1.1 创建数据库 1.2 显示当前数据库 1.3 使用数据库 1.4 删除数据库 二、表的操作 2.1 查看表结构 2.2 创建表 2.3 删除表 三、表的增删改查操作&#xff08;CRUD) 3.1 新增 3.…

改ip地址软件手机怎么弄?分享操作指南与注意事项

随着移动互联网的普及&#xff0c;手机已成为我们日常生活中不可或缺的工具。在某些情况下&#xff0c;我们可能需要更改手机的IP地址&#xff0c;以满足特定的网络需求或实现某些功能。然而&#xff0c;对于许多用户来说&#xff0c;如何在手机上更改IP地址可能是一个相对陌生…

clickhouse与oracle传输数据

参考 https://github.com/ClickHouse/clickhouse-jdbc-bridge https://github.com/ClickHouse/clickhouse-jdbc-bridge/blob/master/docker/README.md clickhouse官方提供了一种方式&#xff0c;可以实现clickhouse与oracle之间传输数据&#xff0c;不仅仅是oracle&#xff0…

ShardingSphere 5.x 系列【25】 数据分片原理之 SQL 解析

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 分片执行流程1.1 Simple Push Down1.2 SQL Federation2. SQL 解析2.1 解析…

代码随想录算法训练营DAY38|C++动态规划Part.1|动态规划理论基础、509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

文章目录 动态规划理论基础什么是动态规划动态规划的解题步骤DP数组以及下标的含义递推公式DP数组初始化DP数组遍历顺序打印DP数组动态规划五部曲 动态规划应该如何debug 509.斐波那契数什么是斐波那契数列动态规划五部曲确定dp数组下标以及含义确定递推公式dp数组如何初始化确…

场景文本检测识别学习 day07(BERT论文精读)

BERT 在CV领域&#xff0c;可以通过训练一个大的CNN模型作为预训练模型&#xff0c;来帮助其他任务提高各自模型的性能&#xff0c;但是在NLP领域&#xff0c;没有这样的模型&#xff0c;而BERT的提出&#xff0c;解决了这个问题BERT和GPT、ELMO的区别&#xff1a; BERT是用来…

翻译《The Old New Thing》 - Why .shared sections are a security hole

Why .shared sections are a security hole - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20040804-00/?p38253 Raymond Chen 2004年08月04日 许多人会推荐使用共享数据节作为在应用程序的多个实例之间共享数据的一种方式。这听起来是个好…

走向大规模应用之前,DePIN 如何突破技术、数据与市场之网

近期&#xff0c;随着分布式物理基础设施网络&#xff08;DePIN&#xff09;的快速演变&#xff0c;一个旨在利用区块链技术彻底改造传统基础设施模型的新兴生态系统正在逐渐浮现。2024 年 4 月&#xff0c;以 peaq 为代表的 DePIN 项目成功筹集了 1500 万美元用于生态系统的扩…

通过 API从 0 到 1 构建 本地 GPTs——1.构建Builder‘s Prompt

目的&#xff1a;帮助小白用户生成结构化 prompt 功能清单 搭建本地 gpts 能力&#xff0c;构建本地企业知识库助手Builder’s Prompt -对话引导构建 prompt 示例&#xff0c;生成助手信息function_call的用法prompt 示例 GPTs 的 Create 能力 用于引导用户构建结构化的 pr…