Clang-Format:让你的代码整齐划一,格式不再烦恼
在现代软件开发中,代码规范和一致性对团队协作和代码质量至关重要。如何保持代码风格一致,避免手动格式化的繁琐操作?clang-format 是一款强大而灵活的代码格式化工具,它为开发者提供了高效的解决方案。本文将详细介绍 clang-format 的概念、历史、功能、自动化使用方案(特别是在 VSCode 中),并给出完整的实例。
一、Clang-Format 概念
clang-format 是 LLVM 项目的一部分,是一种用于自动格式化 C、C++、Objective-C 及其他代码的工具。它可以根据用户指定的风格规则自动调整代码缩进、空格、对齐等,使代码在团队中保持一致的风格。其高度可配置性和广泛的编辑器支持,使其成为现代开发中流行的代码格式化工具之一。

二、Clang-Format 的历史
clang-format 最初是作为 LLVM 项目的一部分开发的,用于为 Clang 编译器提供一个标准化代码风格的工具。LLVM 项目始于 2000 年代初,旨在创建一个模块化和可重用的编译器基础架构,而 clang-format 则随着 Clang 编译器的发展逐渐演变。其目标是为开发人员提供一种简单的方式来保持代码一致性,避免手动格式化带来的不便。
随着开发者对代码质量和可维护性的重视,clang-format 在社区中迅速流行起来,不仅用于个人项目,也被广泛应用于企业和开源项目中。
三、Clang-Format 的作用与功能
clang-format 提供了强大的功能,涵盖了从基本代码缩进到高级格式选项的方方面面。以下是其主要功能:
- 自动格式化代码:根据用户配置自动调整代码缩进、对齐、空格和换行等,使代码符合指定的风格标准。
- 多语言支持:支持 C、C++、JavaScript、Objective-C、Java、Protobuf 等语言。
- 灵活的配置:通过
.clang-format配置文件,可以自定义各种格式化选项,例如缩进宽度、列限制和对齐方式。 - 集成开发环境(IDE)支持:
clang-format可以与主流 IDE 如 VSCode、CLion、Visual Studio 和 Vim 等无缝集成,使得开发者在编写代码时能自动格式化。


四、如何在 VSCode 中使用 Clang-Format 自动格式化代码
VSCode 是一款流行的编辑器,具有丰富的扩展功能,使其与 clang-format 结合使用时变得非常高效。以下是如何在 VSCode 中设置和使用 clang-format 的详细步骤。
1. 安装 clang-format
首先,确保系统中已安装 clang-format。你可以通过以下命令检查 clang-format 是否可用:
clang-format --version
如果未安装,可以通过以下命令进行安装:
- Ubuntu/Debian:
sudo apt install clang-format - macOS:
brew install clang-format
2. 创建 .clang-format 配置文件
在项目的根目录创建一个 .clang-format 文件,该文件定义了格式化规则。例如:
BasedOnStyle: Google
IndentWidth: 4
ColumnLimit: 100
AlignConsecutiveAssignments: true
AlignTrailingComments: true
BasedOnStyle 可以设置为 LLVM、Google、Chromium、Mozilla 等预设风格,用户可以根据需求调整。

3. 在 VSCode 中配置自动格式化
在 VSCode 中,你可以通过设置文件 settings.json 让 clang-format 自动运行。步骤如下:
-
打开 VSCode 的设置文件
settings.json,添加以下配置:"[cpp]": {"editor.defaultFormatter": "xaver.clang-format","editor.formatOnSave": true }这将使 VSCode 在保存 C/C++ 文件时自动运行
clang-format。 -
确保已安装
Clang-Format扩展。你可以在 VSCode 的扩展市场中搜索并安装Clang-Format插件。
4. 手动运行格式化
如果不想在保存时自动格式化,可以手动运行 clang-format:
- 选中要格式化的代码片段,按
Shift + Alt + F,或右键选择“格式化文档”。
五、完整实例:在 VSCode 中自动格式化 C++ 项目
假设你有一个简单的 C++ 项目,目录结构如下:
project-root/
│
├── main.cpp
├── utils.cpp
├── utils.h
└── .clang-format
-
创建
.clang-format文件:在project-root/目录下创建.clang-format文件,添加以下内容:BasedOnStyle: LLVM IndentWidth: 4 ColumnLimit: 80 SortIncludes: true这将基于
LLVM风格格式化代码,并使用 4 空格缩进,列宽限制为 80 字符。 -
编写示例代码:在
main.cpp中编写一段未格式化的代码:#include <iostream> #include "utils.h"int main() { std::cout << "Hello, World!"<<std::endl; int result=add(5,10); std::cout<<"Result: "<<result<<std::endl; return 0; } -
格式化代码:保存文件时,VSCode 会自动运行
clang-format,格式化后的代码如下:#include <iostream> #include "utils.h"int main() {std::cout << "Hello, World!" << std::endl;int result = add(5, 10);std::cout << "Result: " << result << std::endl;return 0; }
六、自动化方案的优势
使用 clang-format 自动格式化代码有以下优势:
- 提高代码一致性:无论是谁编写代码,项目中的代码风格始终保持一致。
- 减少代码审查时间:审查时不再关注代码格式问题,专注于逻辑和功能。
- 提升开发效率:开发者无需手动调整代码格式,减少不必要的工作。
七、总结
clang-format 是一个不可或缺的工具,尤其在大型团队和项目中使用时能显著提高代码质量和可维护性。通过在 VSCode 中配置 clang-format,开发者可以实现代码的自动格式化,从而专注于编写高质量代码而不是格式问题。希望本文能帮助你在项目中轻松集成 clang-format,让代码格式化变得简单而高效。
相关文章:
Clang-Format:让你的代码整齐划一,格式不再烦恼
在现代软件开发中,代码规范和一致性对团队协作和代码质量至关重要。如何保持代码风格一致,避免手动格式化的繁琐操作?clang-format 是一款强大而灵活的代码格式化工具,它为开发者提供了高效的解决方案。本文将详细介绍 clang-form…...
【jvm】Full GC
目录 1. 说明2. 触发条件3. 优化4. 注意事项 1. 说明 1.Full GC(Full Garbage Collection)是Java垃圾回收过程中最重要且最昂贵的一种操作。2.Full GC涉及对整个堆内存(包括年轻代和老年代)的垃圾回收。3.当Full GC发生时&#x…...
【Python】实战:请使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息
# 定义汽车基类 class Car:def __init__(self, model, license_plate):self.model model # 车型self.license_plate license_plate # 车牌def start(self):print(f"{self.model} ({self.license_plate}) 启动了。")def stop(self):print(f"{self.model} ({s…...
互联网摸鱼日报(2024-11-07)
互联网摸鱼日报(2024-11-07) 36氪新闻 阿华田再现颓势 中国旅游景区上市公司,三季度财报好看吗? 电动化浪潮下,消费者彻底放弃百年品牌BBA? 估值114亿,海尔系独角兽终止IPO 又一知名品牌门店全关,高端…...
requests库
GET请求 基本实例import requestsresponse requests.get(https://www.httpbin.org/get) print(response.text)params参数import requests data {"name":"Bileton","age":"21" } response requests.get(https://www.httpbin.org/ge…...
大数据之多级缓存方案
多级缓存介绍?多级缓存优缺点,应用场景?多级缓存架构? 多级缓存介绍 多级缓存方案是一种优化手段,通过在多个级别上存储数据来提高应用程序的性能和响应速度。以下是对多级缓存方案的详细解析: 一、多级缓…...
QCon演讲实录|徐广治:边缘云原生操作系统的设计与思考
10月18日,在 QCon 全球软件开发大会 2024(上海站),火山引擎边缘云资深架构师徐广治围绕火山引擎边缘计算产品背后的算力底座 - 边缘云原生操作系统,探讨如何实现算力服务的混合部署和跨区域弹性调度,以及在…...
web第二次作业
代码如下 <!DOCTYPE html> <html> <head> <!-- 设置页面的字符编码为utf-8,确保能正确显示各种字符 --> <meta charset"utf-8"> <title></title> <style> /* 全局样式设置 */ *{ …...
大模型技术讲解:大模型参数微调(大模型微调)
转自 秋色稻田公众号 这篇文章讲讲大模型的参数微调,参数微调(Fine-tuning)是一种机器学习技术,用于调整大型预训练模型的参数,以大模型适应特定应用场景。这种方法通常用于自然语言处理(NLP)…...
测试自动化如何和业务流程结合?
测试自动化框架固然重要,但是最终自动化的目的都是为了业务服务的。 那测试自动化如何对业务流程产生积极影响? 业务流程的重要性 测试自动化项目并非孤立存在,其生命周期与被测试的应用程序紧密相关。项目的价值在于被整个开发团队所使用&a…...
Python进阶之IO操作
文章目录 一、文件的读取二、文件内容的写入三、之操作文件夹四、StringIO与BytesIO 一、文件的读取 在python里面,可以使用open函数来打开文件,具体语法如下: open(filename, mode)filename:文件名,一般包括该文件所…...
ubuntu如何卸载colmap
如果你是通过源码编译并安装的 COLMAP,可以按照以下步骤手动卸载: 1. **查找安装路径**: 检查 COLMAP 安装时的路径(通常是 /usr/local)。 2. **删除二进制文件**: 删除已安装的 COLMAP 可执行文…...
【comfyui教程】ComfyUI即将迎来全新界面:升级体验就在11月15日
前言 ComfyUI迎来全新界面:升级体验就在11月15日 想象一下,拥有一个更直观、更智能的用户界面,不再需要在繁杂的设置中摸索。这不再只是梦想!从2024年11月15日起,ComfyUI将正式启用新UI (Beta UI)作为默认界面&#…...
Leecode热题100-104.二叉树的最大深度
给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:root [1,null,2] 输出…...
深度学习中的 Dropout:原理、公式与实现解析
8. dropout 深度学习中的 Dropout:原理、公式与实现解析 在神经网络训练中,模型往往倾向于“记住”训练数据的细节甚至噪声,导致模型在新数据上的表现不佳,即过拟合。为了解决这一问题,Dropout 应运而生。通过在训练…...
【大数据学习 | HBASE】habse的表结构
在使用的时候hbase就是一个普通的表,但是hbase是一个列式存储的表结构,与我们常用的mysql等关系型数据库的存储方式不同,mysql中的所有列的数据是按照行级别进行存储的,查询数据要整个一行查询出来,不想要的字段也需要…...
完成程序《大奖赛评分B》
学习目标: 使用代码完成程序《大奖赛评分B》 题目: 如今许多歌手大奖赛评分时,为了体现公平,在评委给出分数后统计平均得分时,都会去掉最高分和最低分。编写程序,读入评委打分(分数都是大于0的…...
K8S篇(基本介绍)
目录 一、什么是Kubernetes? 二、Kubernetes管理员认证(CKA) 1. 简介 2. 考试难易程度 3. 考试时长 4. 多少分及格 5. 考试费用 三、Kubernetes整体架构 Master Nodes 四、Kubernetes架构及和核心组件 五、Kubernetes各个组件及功…...
linux alsa-lib snd_pcm_open函数源码分析(三)
欢迎直接到博客 linux alsa-lib snd_pcm_open函数源码分析(三) 系列文章其他部分: linux alsa-lib snd_pcm_open函数源码分析(一) linux alsa-lib snd_pcm_open函数源码分析(二) linux alsa-lib snd_pcm_open函数源码分析(四…...
基于ssm的个人健康管理系统
项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
