VSCode系列 - 如何用VSCode搭建C++高效開發環境(2)

陌尘(MoChen)發表於2024-08-21
  • 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 Guidecpplint工具本身是有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/Linux macOS 功能描述
Alt + O Option + O 標頭檔案(.h)與原始檔(.cpp)之間切換
F12 Fn + F12 快速跳轉到變數或函式的定義
Shift + F12 Shift + Fn + F12 檢視所有引用,如:變數或函式的定義和所有被呼叫的地方
Alt + F12 Cmd + Shift + F10 Peek(窺視)定義: 在不離開當前程式碼上下文的情況下檢視符號的定義

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】
VSCode系列 - 如何用VSCode搭建C++高效開發環境(2)
掃碼二維碼,關注微信公眾號,閱讀更多精彩內容

相關文章