c++环境和vscode常用的一些有用插件

环境

WSL需要安装cmake

编译器g+±14 应该是包含了所有std:c++23把好像包含部分c++26

vscode 需要插件cmake

vscode clangd 方便提示吧

File Watch 插件目的在保存.h/.cpp文件时候自动执行vscode 的cmake吧

error lens 方便每次显示错误和警告的提示懒得每次点击去看错误

Edit Suggest Preview:打开

Git Graph 的插件还是挺好用的

目录

.clangd

json 复制代码
CompileFlags:
  Add:
    - -std=c++26
    - -ferror-limit=0
  CompilationDatabase: 
      "compile_commands.json"
     
Diagnostics:
  Suppress:
    # 抑制"缺少大括号"的警告,主要针对列表初始化写法
    - missing-braces
        # 忽略未使用的函数的警告(例如调试工具函数)
    - unused-function
        # 忽略结构体未完全初始化的警告(部分字段默认初始化)
    - missing-field-initializers
        # 忽略结构体内存对齐相关的 pack 警告
    - pragma-pack

.clang-format

json 复制代码
BasedOnStyle: Google # 或者其他基础风格,比如 LLVM、Mozilla 等
IndentWidth: 4       # 缩进宽度
TabWidth: 4          # Tab 显示宽度
UseTab: Never        # 使用空格代替 Tab
ColumnLimit: 100     # 设置最长换行长度为 120 个字符
BreakBeforeBraces: Attach # 大括号样式
SortIncludes: false
AccessModifierOffset: -4           # 类访问修饰符(public/private)缩进的偏移

settings.json

json 复制代码
{
    "editor.wordWrap": "on",
    "C_Cpp.intelliSenseEngine": "disabled",
    "clangd.path": "/usr/bin/clangd",
    "clangd.arguments": [
        "--enable-config",
        "-log=verbose",
        "-pretty",
        "--background-index",
        "--compile-commands-dir=/home/xiaqiu/test/build",
        "--header-insertion=never",
        "--function-arg-placeholders=true"
    ],
    "editor.tokenColorCustomizations": {
        "textMateRules": [
            {
                "scope": [
                    //following will be in italic
                    "function",
                    "entity.name.type.class", //class names
                    "constant", //String, Number, Boolean..., this, super
                    "keyword",
                    "storage"
                ],
                "settings": {
                    "fontStyle": "bold",
                    // "foreground": "#240ab4"
                }
            },
            {
                "scope": "comment",
                "settings": {
                    "fontStyle": "bold",
                    "foreground": "#c8c8c8"
                }
            },
            {
                "scope": [
                    "entity.name.type.class"
                ],
                "settings": {
                    "foreground": "#03A1FE",
                    "fontStyle": "bold"
                },
            },
            {
                "scope": "entity.name.function", // 定义函数调用的范围
                "settings": {
                    // "foreground": "#d58728f7",
                    "fontStyle": "bold",
                }
            }
        ],
    },
    "editor.formatOnSave": true,
    "editor.fontFamily": "Fira Code",
    "editor.guides.bracketPairs": true,
    "cmake.debugConfig": {
        "console": "internalConsole"
    },
    "filewatcher.commands": [ //需安装file watcher 插件
        {
            //保存自动编译当前的文件
            "match": "\\.(cpp|h)$",
            "vscodeTask": [
                "cmake.build"
            ], //cmake 插件的命令
            "runInBackground": true,
            "event": "onFileChange"
        }
    ]
}

上层CMakeLists.txt

cpp 复制代码
cmake_minimum_required(VERSION 3.8)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
project("study")
add_subdirectory("src")

下层CMakeLists.txt

cpp 复制代码
# 设置 CMake 的最低版本要求
cmake_minimum_required(VERSION 3.10)

# 设置项目的名称和使用的编程语言
project(MyCppProject CXX)

# 设置 C++ 标准为 C++26
set(CMAKE_CXX_STANDARD 26)

# 使用 file(GLOB ...) 获取当前目录下所有 .cpp 文件
file(GLOB SOURCES "*.cpp")

# 排序 SOURCES 列表(字典顺序)
list(SORT SOURCES)

# 获取字典顺序最大的文件
list(LENGTH SOURCES LIST_SIZE)

if(LIST_SIZE GREATER 0)
    set(MAX_NUMBER -1) # 初始化最大数字为负值
    set(MAX_FILE "") # 初始化最大文件为空字符串

    # 遍历 SOURCES 列表中的所有文件
    foreach(FILE ${SOURCES})
        # 从路径中提取文件名部分
        get_filename_component(FILENAME ${FILE} NAME)

        # 获取文件名中的数字部分
        string(REGEX MATCH "[0-9]+" FILE_NUMBER "${FILENAME}")

        # 如果提取到的数字大于当前最大数字,更新最大数字和对应的文件
        if(FILE_NUMBER GREATER ${MAX_NUMBER})
            set(MAX_NUMBER ${FILE_NUMBER})
            set(MAX_FILE ${FILE})
        endif()
    endforeach()

    # 输出最大的文件和数字
    message(STATUS "最大数字对应的文件是: ${MAX_FILE}")
    message(STATUS "提取的最大数字是: ${MAX_NUMBER}")

    # 编译提取数字最大值对应的文件
    if(MAX_FILE)
        message(STATUS "正在编译文件: ${MAX_FILE}")

    # 这里可以添加编译命令,例如:
    # add_executable(${MAX_FILE} ${MAX_FILE})
    else()
        message(WARNING "没有找到包含数字的文件")
    endif()
else()
    message(WARNING "没有 .cpp 文件被发现")
endif()

# 创建可执行文件
add_executable(test ${MAX_FILE})

debug 发现没有gdb 安装gdb

查看二进制需要hex edit插件

值得注意的地方

相关选项推荐

clangd 有很多有用的启动参数,可以极大提升你的 C/C++ 开发体验,特别是在 VS Code 或其他支持 LSP 的编辑器中。

以下是一些 常用且推荐的 clangd 参数,并附上说明和用途:


🔧 常用 & 推荐 clangd 启动参数

参数 说明 推荐值
--completion-style= 控制补全显示的详细程度 detailed
--function-arg-placeholders 补全函数时是否插入参数占位符 true ✅(默认)
--header-insertion= 控制自动插入头文件 iwyu / never
--header-insertion-decorators 是否显示头文件建议来源(如 #include <vector> true(默认)
--background-index 在后台为整个项目建立索引,加速跳转 true
--pch-storage= 控制 PCH(预编译头文件)缓存存储方式 memory(快)
--clang-tidy 启用 clang-tidy 静态检查 true
--suggest-missing-includes 当找不到符号时,建议包含头文件 true
--ranking-model 自动补全排序方式 decision_forest(更智能)
--log= 设置日志输出 verbose(调试用)

📌 参数详细说明:

1. --completion-style=detailed

显示补全项的完整类型签名、返回值,帮助你更快理解函数。

2. --clang-tidy

运行 clang-tidy 检查,给你静态代码质量建议(如风格、性能、bug 潜在点)。

✨ 可以配合 .clang-tidy 文件进行自定义检查。

3. --background-index

为整个项目自动生成索引,而不是仅索引打开的文件。大大提升跳转(Go to definition)、查找引用速度。

4. --pch-storage=memory

使用内存缓存 PCH,加快补全速度(尤其是大型项目)。缺点是占用更多内存。

5. --header-insertion=iwyu

"Include What You Use" 模式,clangd 会在你用到符号时,自动推荐需要 #include 的头文件。

6. --suggest-missing-includes

如果你用到了某个类型但没包含对应头文件,clangd 会提示你并建议修复。

7. --ranking-model=decision_forest

启用更智能的补全排序模型(使用机器学习技术),比默认排序更符合实际需求。


⚙️ 示例:VS Code 中启用这些参数

编辑你的 settings.json

json 复制代码
"clangd.arguments": [
  "--background-index",
  "--clang-tidy",
  "--completion-style=detailed",
  "--function-arg-placeholders=true",
  "--pch-storage=memory",
  "--header-insertion=iwyu",
  "--suggest-missing-includes",
  "--ranking-model=decision_forest"
]

🎯 总结:推荐开启的选项组合

--background-index

--clang-tidy

--completion-style=detailed

--function-arg-placeholders=true

--header-insertion=iwyu

--suggest-missing-includes

--ranking-model=decision_forest

这些选项一起使用,可以显著增强代码补全、诊断、导航的体验。


另外一个悬浮翻译的插件也不错

英语发音的插件

vscode 的smooth 选项

相关推荐
xiaolang_8616_wjl5 分钟前
c++_2011 NOIP 普及组 (1)
开发语言·数据结构·c++·算法·c++20
清羽_ls24 分钟前
vscode源代码管理Tab-文件右侧标志(M、A 等)的含义
ide·vscode·源代码管理
weixin_4543937932 分钟前
vscode中设置eslint保存时自动格式化未生效
ide·vscode·编辑器
YuforiaCode1 小时前
第十六届蓝桥杯 2025 C/C++组 密密摆放
c语言·c++·蓝桥杯
潇-xiao2 小时前
Qt实现 hello world + 内存泄漏(5)
c++·qt
智驾3 小时前
C++,设计模式,【建造者模式】
c++·设计模式·建造者模式
Invinciblenuonuo3 小时前
实习技能记录【4】-----消息分发中的观察者模型
c++
Wabi_sabi_x3 小时前
C++设计模式:面向对象的八大设计原则之三
开发语言·c++·设计模式
qq_447429414 小时前
数据结构与算法:图论——最短路径
c语言·数据结构·c++·图论
yi个名字4 小时前
C++ STL vector容器详解:从原理到实践
开发语言·c++