VSCode+clangd让写C/C++代码更丝滑-二、配置

我们知道,C与C++的语法以及使用的头文件是不完全一样的,要想让clangd按我们的想法去处理,就需要进行一些配置。

clangd的配置有两种方式,一种是项目级的,另一种是用户级的。
项目级的只需要在项目的根目录添加一个.clangd的配置文件即可。
用户级的就需要根据不同的操作系统来添加config.yaml配置文件到不同的路径下:

  • Windows: %LocalAppData%\clangd\config.yaml, 比如C:\Users\witton\AppData\Local\clangd\config.yaml
  • macOS: ~/Library/Preferences/clangd/config.yaml
  • Linux and others: $XDG_CONFIG_HOME/clangd/config.yaml, 通常为:~/.config/clangd/config.yaml.

不管是.clangd还是config.yaml它的格式都是yaml格式,配置方法完全一样。如果既配置了用户级的config.yaml,又配置了项目级的.clangd,则会同时启用相关配置,如果发生冲突,用户级的config.yaml优先级最高,其次是内部项目级,最后是引用的外部项目级。

一个C/C++项目可能既有C语言文件,也有C++文件,前面有提到,它们是需要有不同的处理方式,C语言需要使用C语言的标准,C++需要使用C++的标准。比如C使用C17标准,C++使用C++23,可以分别配置不同的块,为不同的扩展名使用不同的编译参数,块与块之间使用---来分隔:

# 这段为C++代码配置
If:
  PathMatch: [.*\.cpp, .*\.cxx, .*\.cc, .*\.h, .*\.hpp, .*\.hxx]
CompileFlags:
  Add: [-std=c++23]
---
# 这段为C代码配置
If:
  PathMatch: [.*\.c]
CompileFlags:
  Add: [-std=c17]

前面有说过clangd还能够整合clang-tidy进行C/C++代码的静态分析,实时对代码进行诊断,在配置文件中添加:

Diagnostics:
  ClangTidy:
    Add: ["*"]

并在settings.json中添加配置:

"clangd.arguments": [
    "--clang-tidy"
 ]

启用clang-tidy。这样配置会把所有提示都给出来,但有些提示不会影响代码质量,只是为了更加规范罢了,比如未引用的变量之类的等等。笔者把笔者的配置贴出来:

Diagnostics:
  ClangTidy:
    Add: ["*"]
    Remove:
    [
      abseil*,
      altera*,
      fuchsia*,
      llvmlib*,
      zircon*,
      google-readability-todo,
      readability-braces-around-statements,
      hicpp-braces-around-statements,
      misc-unused*
    ]
    CheckOptions:
      WarnOnFloatingPointNarrowingConversion: false
---
# 这段为C++代码配置
If:
  PathMatch: [.*\.cpp, .*\.cxx, .*\.cc, .*\.h, .*\.hpp, .*\.hxx]
CompileFlags:
  Add: [-std=c++23]
---
# 这段为C代码配置
If:
  PathMatch: [.*\.c]
CompileFlags:
  Add: [-std=c17]

settings.json:

  "C_Cpp.intelliSenseEngine": "disabled",
  "clangd.onConfigChanged": "restart",
  "clangd.arguments": [
    "--clang-tidy",
    "--clang-tidy-checks=performance-*,bugprone-*",
    "--query-driver=/usr/bin/clang,/usr/bin/clang++",
    "--all-scopes-completion",
    "--completion-style=detailed",
    "--function-arg-placeholders",
    "--header-insertion=iwyu",
    "--pch-storage=disk"
  ],
  "cmake.exportCompileCommandsFile": true,

如果想要笔者前面所示的提示到代码编辑中,可以安装usernamehw.errorlens插件:

在这里插入图片描述

上一篇:【快捷部署】007_Tomcat(8.5.79)


下一篇:跨越界限:AI大模型在关键技术领域的综合应用