- 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. 新增高亮關鍵字
- 1.1. C/C++
- 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
: 其他雜項配置。
進行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
- 下載LLVM
點選 llvm-project/releases 進入LLVM專案的二進位制下載頁面,下載最新版本的Windows安裝包。
- 安裝LLVM
將下載後的安裝包clang+llvm-18.1.8-x86_64-pc-windows-msvc.tar.xz
解壓後複製到自己的軟體安裝目錄下(如:C:\software\clang-llvm-18.1.8
),bin
目錄下會有個 clang-format.exe
,這個就是我們需要的程式碼格式化器。
- 配置碼格式化器
開啟Clang-Format外掛的配置頁面:
vscode -> Settings -> Extensions -> Clang-Format configuration
方式一:
將clang-format.exe
的絕對路徑設定到Executable
。
方式二:
將C:\software\clang-llvm-18.1.8\bin
目錄新增到系統環境變數的Path
中,VSCode配置頁的Executable
填寫clang-format
。
如果不配置 clang-format.exe 路徑,格式化程式碼就會報錯如下:
The 'clang-format' command is not available. Please check your clang-format.executable user setting and ensure it is installed.
- 格式化程式碼的快捷鍵
格式化部分程式碼: 選中部分程式碼,ctrl + k , ctrl + f
格式化所有程式碼: shift + alt + f。
格式化整個程式碼原始檔: 編輯區域右鍵 -> Format Document。
- 設定程式碼風格樣式
開啟Clang-Format外掛的配置頁面:vscode -> Settings -> Extensions -> Clang-Format configuration
Fallback Style:選擇你喜歡的風格樣式,可以使用以下這些值,這些都是最受歡迎的C++程式碼風格樣式:
LLVM, Google, Chromium, Mozilla, WebKit。
- 自定義程式碼樣式
如果以上這些程式碼風格的樣式都不能滿足你的需求,可以自定義程式碼風格樣式,也可以基於某種特定的程式碼風格做一些符合自己習慣的樣式調整。
在專案的根目錄下建立一個.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基於cppcheck
和cpplint
的C++程式碼檢查工具,他將cppcheck
、cpplint
和VSCode
完美的整合在一起。對cppcheck
和cpplint
有依賴,其中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. 外掛的使用
- 下載並安裝Cppcheck(Windows透過安裝包安裝的話,安裝完後要設定Path環境變數)。
- 開啟命令列終端,執行
cppcheck --version
檢查是否安裝正常,有正常輸出版本號說明安裝成功。 - 重啟VSCode.
- 開啟配置頁(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"
]
}
程式碼分析工具的配置:
Cppcheck
的配置可以參考“5.2.3. 外掛的使用”的相關內容。- 其他程式碼分析工具的配置,大家可以自己閱讀對應的官方文件。
- 只需要配置已安裝並啟用的程式碼分析工具。
1.5. Bracket Pair Colorizer
1.5.1. 外掛介紹
外掛功能:成對的括號標記成不同的顏色,提高程式碼的可讀性。
外掛說明:該外掛已廢棄,因為最新版本(我的1.91.1版本已經內建了)的VSCode已經內建了該功能。
1.5.2. 功能配置
既然VSCode已經內建了該功能,我們將不在需要安裝這個外掛,直接在VSCode的設定中配置該功能即可。
- 開啟配置頁面:vscode -> Settings
- 在搜尋框種輸入
@id:editor.bracketPairColorization.enabled @id:editor.guides.bracketPairs
。 Editor › Guides: Bracket Pairs
的三個可選引數,含義分別如下:false
: 禁用括號對引導線
。true
: 啟用括號對引導線
。active
: 只對當前游標所在的括號對啟用括號對引導線
。
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的外掛,它可以高亮顯示程式碼中存在的TODO
和FIXME
等註釋,方便開發者快速定位程式碼中需要解決的任務。
1.7.2. 新增高亮關鍵字
- 進入設定頁面:
vscode -> Settings -> Extensions -> TODO Highlight
。 - 在
TODOhighlight:Keywords
配置項點選Edit in settings.json
。 - 在
"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,未來還會折騰更多東西,不死不休。
感謝大家的關注,期待與你一起成長。