VSCode系列 - 如何用VSCode搭建C++高效开发环境(2)

  • 1. 插件的用法
    • 1.1. C/C++
      • 1.1.1. 插件介绍
      • 1.1.2. 插件配置
    • 1.2. Clang-Format
    • 1.3. cpp-check-lint
      • 1.3.1. cpplint
      • 1.3.2. cppcheck
      • 1.3.3. 插件的使用
    • 1.4. C/C++ Advanced Lint
      • 1.4.1. 插件介绍
      • 1.4.2. 插件配置
    • 1.5. Bracket Pair Colorizer
      • 1.5.1. 插件介绍
      • 1.5.2. 功能配置
    • 1.6. Code Runner
      • 1.6.1. 插件介绍
      • 1.6.2. 插件配置
      • 1.6.3. 插件使用
    • 1.7. TODO Highlight
      • 1.7.1. 插件介绍
      • 1.7.2. 添加高亮关键字
  • 2. C++开发常用的快捷键
  • 3. 参考文档

1. 插件的用法

1.1. C/C++

1.1.1. 插件介绍

在VSCode下进行C/C++开发,C/C++插件是最重要、功能最强大、也是最复杂的一个插件。我们从C/C++的插件配置也能看出端倪:整个插件有158项配置,包含7大功能模块:

  • IntelliSense: 代码智能提示、补全、跳转等功能,集成了C++ Intellisense插件的几乎所有功能。
  • Formatting: 代码格式化器,可对代码进行自动格式化。
  • Code Documentation: 通过代码(注释)生成文档,定义注释的样式,集成Doxygen等工具。
  • Code Analysis: 代码分析器,对代码的错误、风格等进行检查,集成了Clang-Tidy
  • Debugging: Debug调试器。
  • Resource Management: 资源管理器。
  • Miscellaneous: 其他杂项配置。

file

进行C/C++开发,C/C++是必装的一个插件,因为没有这个插件,你跟在记事本里写代码没有太大区别。

1.1.2. 插件配置

虽然C/C++这个插件功能很多很复杂,但是我们也并不需要把158项配置全都了解完。因为大部分配置我们直接用默认的就可以了,并不需要逐个去了解他,默认配置即是最佳配置。我们只需要了解一小部分常用配置即可。

settings.json:

{// 启用|禁用错误提示,可选值: enabled, disabled"C_Cpp.errorSquiggles": "enabled",// Intellisense的配置。启用|禁用智能提示,可选值:Default、Disabled"C_Cpp.autocomplete": "Default",// C++语言编辑哪些内容时会进行智能提示和补全"[cpp]": {"editor.quickSuggestions": {"comments": "on", // 代码注释"strings": "on", // 常量字符串"other": "on" // 其他}},// C语言编辑哪些内容时会进行智能提示和补全"[c]": {"editor.quickSuggestions": {"comments": "on", // 代码注释"strings": "on", // 常量字符串"other": "on" // 其他}}
}

1.2. Clang-Format

  1. 下载LLVM

点击 llvm-project/releases 进入LLVM项目的二进制下载页面,下载最新版本的Windows安装包。

file

  1. 安装LLVM

将下载后的安装包clang+llvm-18.1.8-x86_64-pc-windows-msvc.tar.xz解压后拷贝到自己的软件安装目录下(如:C:\software\clang-llvm-18.1.8),bin目录下会有个 clang-format.exe,这个就是我们需要的代码格式化器。

  1. 配置码格式化器

打开Clang-Format插件的配置页面: vscode -> Settings -> Extensions -> Clang-Format configuration

方式一:clang-format.exe的绝对路径设置到Executable

file

方式二:C:\software\clang-llvm-18.1.8\bin目录添加到系统环境变量的Path中,VSCode配置页的Executable填写clang-format

file

如果不配置 clang-format.exe 路径,格式化代码就会报错如下:

The 'clang-format' command is not available. Please check your clang-format.executable user setting and ensure it is installed.
  1. 格式化代码的快捷键

格式化部分代码: 选中部分代码,ctrl + k , ctrl + f

格式化所有代码: shift + alt + f。

格式化整个代码源文件: 编辑区域右键 -> Format Document。

  1. 设置代码风格样式

打开Clang-Format插件的配置页面:vscode -> Settings -> Extensions -> Clang-Format configuration

Fallback Style:选择你喜欢的风格样式,可以使用以下这些值,这些都是最受欢迎的C++代码风格样式:

LLVM, Google, Chromium, Mozilla, WebKit。

file

  1. 自定义代码样式

如果以上这些代码风格的样式都不能满足你的需求,可以自定义代码风格样式,也可以基于某种特定的代码风格做一些符合自己习惯的样式调整。

在项目的根目录下创建一个.clang-format文件,并在文件中写入自定义的代码风格样式,具体格式定义的使用规则可以参考Clang-Format Style Options。

以下是个人的.clang-format配置,可以作为Demo提供参考:

# clang-format的般般: 18.1.8
# 基于Mozilla的样式进行自定义Language: Cpp
BasedOnStyle: Mozilla
# 代码缩进:空格数
IndentWidth: 4
# Tab键设置:不使用换行符\t(使用空格)
UseTab: Never
# Tab键设置:4个空格
TabWidth: 4
# 权限关键字(public, private, protected): 往左缩进4个字符
AccessModifierOffset: -4
# 最大列宽:99
ColumnLimit: 99# # 大括号({})换行
# BreakBeforeBraces: Allman
# # 短函数的处理策略:只有空函数才会合并成一行
# AllowShortFunctionsOnASingleLine: Empty
# # 短条件语句的处理策略:从不合并成一行
# AllowShortIfStatementsOnASingleLine: Never
# # 短循环语句的处理策略:从不合并成一行
# AllowShortLoopsOnASingleLine: false
# # 短代码块的处理策略:只有空代码块才会合并成一行
# AllowShortBlocksOnASingleLine: Empty
# # 模板声明后的换行策略:总是换行
# AlwaysBreakTemplateDeclarations: Yes
# # 指针的对齐方式:右对齐
# PointerAlignment: Right
# # # 指针(引用)的对齐方式:会分析文件内的大部分指针的对齐方式来决定自己的策略
# DerivePointerAlignment: true

1.3. cpp-check-lint

cpp-check-lint基于cppcheckcpplint的C++代码检查工具,他将cppcheckcpplintVSCode完美的集成在一起。对cppcheckcpplint有依赖,其中cppcheck需要自己另外手动安装,并将可执行文件的路径配置到插件的cpp-check-lint.cppcheck.--executable

1.3.1. cpplint

cpplint是一个用于检查C++代码规范的工具,它可以帮助我们自动化地检查代码,发现潜在的编码问题,确保代码风格的一致性和规范性,提高代码质量。cpplint的代码检查会遵循 Google C++ Style Guide。cpplint工具本身是有Python实现的,可以通过pip install来安装。

cpplint侧重于C++代码规范和风格的检查。

1.3.2. cppcheck

cppcheck是一个 C/C++ 静态代码分析工具,检测编译器通常无法检测到的错误类型,目标是没有误报。

cpplint侧重于C++代码的错误、潜在安全问题、潜在性能问题的检查。

检查范围包括:

自动变量检查;
数组的边界检查;
class类检查;
过期的函数,废弃函数调用检查;
异常内存使用,释放检查;
内存泄漏检查,主要是通过内存引用指针;
操作系统资源释放检查,中断,文件描述符等;
异常STL 函数使用检查;
代码格式错误,以及性能因素检查。
1.3.3. 插件的使用
  1. 下载并安装Cppcheck(Windows通过安装包安装的话,安装完后要设置Path环境变量)。
  2. 打开命令行终端,执行cppcheck --version检查是否安装正常,有正常输出版本号说明安装成功。
  3. 重启VSCode.
  4. 打开配置页(vscode -> Settings -> Extensions -> cpp-check-lint)完成相应的配置:

关键配置说明如下:

# 是否启用cpp-check-lint插件
"cpp-check-lint.--enable": true,
# 是否启用cppcheck检查
"cpp-check-lint.cppcheck.--enable": true,
# 如果已配置Path环境变量,可直接填写cppcheck,否则需要填写绝对路径
"cpp-check-lint.cppcheck.--executable": "cppcheck",
# 使用什么语言进行检查,可以选择:c、c++
"cpp-check-lint.cppcheck.--language=": "c++",
# 使用的C++标准
"cpp-check-lint.cppcheck.--std_c++=": "c++11",
# 使用的C语言标准
"cpp-check-lint.cppcheck.--std_c=": "c11"
# 是否支持内联函数
"cpp-check-lint.cppcheck.--inline-suppr": false,
# 是否开启文件保存时立刻检查该文件
"cpp-check-lint.cppcheck.--onsave": true,
# 是否开启快速修复功能
"cpp-check-lint.cppcheck.--quick_fix": false,
# 开启额外的检查,可以选择一项或多项(多项时用','分割)。可以是以下类型值:
# warning: 开启警告消息
# style: 开启代码样式(规范)检查
# performance: 开启代码性能检查
# portability: 开启可移植性检查
# information: 启用info信息检查
# unusedFunction: 启用 未使用的函数 检查
# missingInclide: 未包含头文件时发出警告
# all: 以上所有类型检查
"cpp-check-lint.cppcheck.--enable=": "all",
# 是否启用cpplint检查
"cpp-check-lint.cpplint.--enable": true,
# 如果已配置Path环境变量,可直接填写cpplint,否则需要填写绝对路径
"cpp-check-lint.cpplint.--executable": "cpplint"
# 代码行长度限制
"cpp-check-lint.cpplint.--linelength=": 120,
# 是否开启文件保存时立刻检查该文件
"cpp-check-lint.cpplint.--onsave": true,
# 是否开启快速修复功能
"cpp-check-lint.cpplint.--quick_fix": true,
# 会检查的文件后缀,可以这些值:hxx,h++,cxx,cc,hh,h,cpp,cuh,c,hpp,c++,cu
"cpp-check-lint.cpplint.--extensions=": "hxx,h++,cxx,cc,hh,h,cpp,c,hpp,c++"
# 支持的头文件后缀
"cpp-check-lint.cpplint.--headers=": "hxx,h++,hh,h,hpp",

1.4. C/C++ Advanced Lint

1.4.1. 插件介绍

C/C++ Advanced Lint是C/C++静态代码分析工具,支持:1. 自动识别可用的静态代码分析工具,2. 代码编写过程中执行检测。与cpp-check-lint是同类型的插件,最大的区别是支持的代码分析工具的钟磊和数量不同。

cpp-check-lint 只支持:

  • CppCheck
  • CppLint

C/C++ Advanced Lint支持:

  • CppCheck
  • Clang
  • FlawFinder
  • PC-lint Plus
  • Flexelint or PC-lint
  • lizard

C/C++ Advanced Lint要正常使用,至少需要安装一种上面的代码分析工具(可以同时安装和启用多个分析工具)。

1.4.2. 插件配置

关键配置:

{// 启用C/C++ Advanced Lint插件"c-cpp-flylint.enable": true,// 什么时候执行代码检查,可填写:onType、onSave、onBuild"c-cpp-flylint.run": "onSave",// 检测的语言类型,可线性:c、c++"c-cpp-flylint.language": "c++",// C和C++的标准,可填写:c11、c++11、c++14、c++17、c++20"c-cpp-flylint.standard": ["c11","c++11"]
}

代码分析工具的配置:

file

  1. Cppcheck的配置可以参考“5.2.3. 插件的使用”的相关内容。
  2. 其他代码分析工具的配置,大家可以自己阅读对应的官方文档。
  3. 只需要配置已安装并启用的代码分析工具。

1.5. Bracket Pair Colorizer

1.5.1. 插件介绍

插件功能:成对的括号标记成不同的颜色,提高代码的可读性。 插件说明:该插件已废弃,因为最新版本(我的1.91.1版本已经内置了)的VSCode已经内置了该功能。

1.5.2. 功能配置

既然VSCode已经内置了该功能,我们将不在需要安装这个插件,直接在VSCode的设置中配置该功能即可。

  1. 打开配置页面:vscode -> Settings
  2. 在搜索框种输入@id:editor.bracketPairColorization.enabled @id:editor.guides.bracketPairs
  3. Editor › Guides: Bracket Pairs的三个可选参数,含义分别如下:
    • false: 禁用括号对引导线
    • true: 启用括号对引导线
    • active: 只对当前光标所在的括号对启用括号对引导线

file

1.6. Code Runner

1.6.1. 插件介绍

Code Runner是一款VSCode的插件,它可以让你在VSCode中运行C、C++、Java、Python、JavaScript、PHP、Go、Swift、Perl、Ruby、R等语言的代码。

通过这个插件可以快速的编译、运行C++代码,在编写和调试一些Demo代码时非常方便。(在编译大型项目代码时还是建议用CMake、QT、Visual Studio等工具)。

1.6.2. 插件配置

settings.json:

{// 配置Code Runner针对C++语言的运行脚本"code-runner.executorMap": {// Linux下通过GCC编译器便于和运行"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",// ... 其他语言},// 运行代码时是否在终端中打开,可选值:true、false"code-runner.runInTerminal": true,// 设置终端控制台的编码,65001是UTF-8编码"terminal.integrated.shellArgs.windows": ["/K chcp 65001 >nul"]
}
1.6.3. 插件使用

方法一:在要执行的.cpp文件右键 -> Run Code

方法二:在VSCode的命令面板中输入:Code Runner: Run Code,然后选择Run Code按回车

方法三:快捷键:Ctrl + Alt + N

1.7. TODO Highlight

1.7.1. 插件介绍

TODO Highlight是一款VSCode的插件,它可以高亮显示代码中存在的TODOFIXME等注释,方便开发者快速定位代码中需要解决的任务。

1.7.2. 添加高亮关键字
  1. 进入设置页面: vscode -> Settings -> Extensions -> TODO Highlight
  2. TODOhighlight:Keywords配置项点击Edit in settings.json
  3. "todohighlight.keywords"中增加需要定义的关键词。

插件默认只配置了两个关键字:TODO:FIXME:,注意后面需要跟:才能显示高亮。定义如下:

{// ..."todohighlight.keywords": [{"text": "TODO:","color": "#fff","backgroundColor": "#ffbd2a","overviewRulerColor": "rgba(255,189,42,0.8)"},{"text": "FIXME:","color": "#fff","backgroundColor": "#f06292","overviewRulerColor": "rgba(240,98,146,0.8)"}]
}

我的需求是:

  • 关键不加:也要能高亮。
  • 关键字要同时支持大小写。

修改后的配置如下:

{// ..."todohighlight.keywords": [{"text": "TODO","color": "#fff","backgroundColor": "#ffbd2a","overviewRulerColor": "rgba(255,189,42,0.8)"},{"text": "FIXME","color": "#fff","backgroundColor": "#f06292","overviewRulerColor": "rgba(240,98,146,0.8)"},{"text": "todo","color": "#fff","backgroundColor": "#ffbd2a","overviewRulerColor": "rgba(255,189,42,0.8)"},{"text": "fixme","color": "#fff","backgroundColor": "#f06292","overviewRulerColor": "rgba(240,98,146,0.8)"}]
}

2. C++开发常用的快捷键

Windows/LinuxmacOS功能描述
Alt + OOption + O头文件(.h)与源文件(.cpp)之间切换
F12Fn + F12快速跳转到变量或函数的定义
Shift + F12Shift + Fn + F12查看所有引用,如:变量或函数的定义和所有被调用的地方
Alt + F12Cmd + Shift + F10Peek(窥视)定义: 在不离开当前代码上下文的情况下查看符号的定义

3. 参考文档

https://clang.llvm.org/docs/ClangFormatStyleOptions.html

https://dev.to/dhanu0510/how-to-configure-c-code-formatting-in-visual-studio-code-4d5m


大家好,我是陌尘。

IT从业10年+, 北漂过也深漂过,目前暂定居于杭州,未来不知还会飘向何方。

搞了8年C++,也干过2年前端;用Python写过书,也玩过一点PHP,未来还会折腾更多东西,不死不休。

感谢大家的关注,期待与你一起成长。



【SunLogging】
扫码二维码,关注微信公众号,精彩内容

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

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

相关文章

【机器学习】探索机器学习在旅游业的革新之旅

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 🔍1. 引言📒2. 机器学习在旅游需求分析中的应用🌞用户行为数据分析🌙旅客偏好预测模型⭐…

Java面试八股之如何保证消息队列中消息不重复消费

如何保证消息队列中消息不重复消费 要保证消息队列中的消息不被重复消费,通常需要从以下几个方面来着手: 消息确认机制: 对于像RabbitMQ这样的消息队列系统,可以使用手动确认(manual acknowledge)机制来…

C++ 设计模式——策略模式

策略模式 策略模式主要组成部分例一:逐步重构并引入策略模式第一步:初始实现第二步:提取共性并实现策略接口第三步:实现具体策略类第四步:实现上下文类策略模式 UML 图策略模式的 UML 图解析 例二:逐步重构…

【c语言】整数在内存中的储存(大小端字节序)

整数在内存中的储存(大小端字节序) 1.整数在内存中的储存 2.大小端字节序 3.整数在内存中储存例子 4.字节序判断 5.死循环现象 文章目录 整数在内存中的储存(大小端字节序)整数在内存中的储存大小端字节序什么是大小端为什么会有…

Unity 麦扣 x 勇士传说 全解析 之 怪物基类(2)(附各模块知识的链接,零基础也包学会的牢弟)(案例难度:★★☆☆☆)

1.怪物的动画逻辑一览 2.怪物的受伤死亡逻辑一览 using System.Collections; using System.Collections.Generic; using System.Xml; using UnityEngine;public class Monster : MonoBehaviour {[Header("速度")]public float normalSpeed;public float chaseSpeed;…

在国产芯片上实现YOLOv5/v8图像AI识别-【2.5】yolov8使用C++部署在RK3588更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频:https://www.bilibili.com/video/BV1or421T74f 背景…

nginx简介及功能

一、简介: 1、nginx、apache是什么? ‌Nginx‌是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。它由伊戈尔赛索耶夫为Rambler.ru站点开发,以其稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而…

OSI七层网络模型 /TCP/IP五层模型以及封装分用的详细讲解

文章目录 协议分层的好处OSI七层网络模型TCP/IP五层网络模型网络设备所在的分层(重点)封装和分用 协议分层的好处 第一点: 在网络通信中,如果使用一个协议来解决所有的问题,那么这个协议就会非常的庞大,非常不利于去学习和理解&…

2023华为od机试C卷【转盘寿司】C 实现 单调栈

#include <stdio.h> #include <stdlib.h>/*单调栈 旋转寿司3 15 6 14 3 21 9 17*/ int main() {int i 0;int len 0;int data 0;int nums[501];char c ;while(scanf("%d",&nums[i]) 1){i;len;c getchar();if(c \n)break;}int *out NULL;int *s…

C语言-部分字符串函数详解 1-4

C语言-部分字符串函数详解 1-4 前言1.strlen1.1基本用法1.2注意事项\0size_t 1.3模拟实现 2.strcpy2.1基本用法2.2注意事项**源字符串必须以 \0 结束****会将源字符串中的 \0拷贝到目标空间****目标空间必须可修改****目标空间必须能容纳下源字符串的内容** 2.3模拟实现 3.strn…

【深度学习】【语音TTS】GPT-SoVITS v2 实战,训练一个人的音色,Docker镜像

文章目录 原理Dockerdocker push训练教程: https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/xyyqrfwiu3e2bgyk 原理 Docker 不用docker不行,不好分配显卡, 做个docker镜像: docker pull pytorch/pytorch:2.1.2

接口基础知识9:详解response body(响应体)

课程大纲 一、定义 HTTP响应体&#xff08;HTTP Response Body&#xff09;&#xff1a;服务器返回给客户端的数据部分&#xff0c;‌它包含了服务器对客户端请求的响应内容&#xff08;如客户端请求的资源、客户端请求的执行结果&#xff09;。 与请求类似&#xff0c;HTTP …

python之matplotlib (3 坐标轴设置)

写在前面 在说明坐标轴设置之前&#xff0c;我有必要和大家说清楚图像设置的一些方法&#xff0c;避免陷入困扰模糊的地步。前面我们说过&#xff0c;画图的三种方法&#xff08;python之matplotlib &#xff08;1 介绍及基本用法&#xff09;-CSDN博客&#xff09;。而设置也…

2024开源资产管理系统推荐 8款免费开源IT资产管理系统/软件

开源资产管理系统 开源资产管理系统是帮助企业管理、跟踪和优化其资产的强大工具。这些系统能够自动记录资产的详细信息&#xff0c;如采购日期、使用情况、维护记录等&#xff0c;从而实现资产的全生命周期管理。企业可以通过这些系统优化资产使用效率&#xff0c;减少资产闲…

【TCP】确认应答、超时重传机制和TCP报头

TCP 相关机制 TCP 基本特点&#xff1a;有连接、可靠传输、面向字节流、全双工 有连接、面向字节流和全双工都能在前面的代码中体现有连接&#xff1a;必须要先调用 accept 建立联系才能处理面向字节流&#xff1a;会拿到 clientSocket 对象的 InputStream 和 OutputStream&a…

python人工智能002:jupyter基本使用

小知识&#xff1a;将jupyter修改为中文&#xff0c;修改用户变量&#xff0c; 注意是用户变量&#xff0c;不是系统变量 新增用户变量 变量名&#xff1a;LANG 变量值&#xff1a;zh_CN.UTF8 然后重启jupyter 上一章的软件安装完成之后&#xff0c;就可以创建文件夹来学习写…

MaxKB(二):Ubuntu24.04搭建maxkb开发环境

接上文&#xff1a;windows10搭建maxkb开发环境&#xff08;劝退指南&#xff09; 上文在windows10环境搭建maxkb开发环境遇到各种坑&#xff0c;后面就转战ubuntu平台&#xff0c;果然比较顺利的完成开发环境搭建。当然遇到相关的问题还是可以参考上文《windows10搭建maxkb开发…

拟合与插值|线性最小二乘拟合|非线性最小二乘拟合|一维插值|二维插值

挖掘数据背后的规律是数学建模的重要任务&#xff0c;拟合与插值是常用的分析方法 掌握拟合与插值的基本概念和方法熟悉Matlab相关程序实现能够从数据中挖掘数学规律 拟合问题的基本提法 拟合问题的概念 已知一组数据(以二维为例)&#xff0c;即平面上n个点 ( x i , y i ) …

C语言指针详解-上

C语言指针详解-上 前言1.指针的基本概念1.1指针是什么1.2指针的声明与初始化1.3取地址符&和解引用符*& 运算符用于**获取变量的地址*** 运算符用于访问指针指向的值 2.指针的类型常见数据类型的指针指针与数组、字符串数组指针结构体指针函数指针二级指针void指针 3.指…

对零基础想转行网络安全同学的一点建议

最近有同学在后台留言&#xff0c;0基础怎么学网络安全&#xff1f;0基础可以转行做网络安全吗&#xff1f;以前也碰到过类似的问题&#xff0c;想了想&#xff0c;今天简单写一下。 我的回答是先了解&#xff0c;再入行。 具体怎么做呢&#xff1f; 首先&#xff0c;你要确…