您當前的位置:首頁 > 動漫

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

作者:由 Sirius 發表于 動漫時間:2021-08-11

推薦一款筆記工具:

Sirius:思源筆記——兼收幷蓄,打造屬於你的數字花園

更新於我的個人部落格:

Vscode配置c++開發環境 | Sirius的空間 (blackstar。pro)

0 前言

在Windows上無法使用完整的clang,本文面向GNU/Linux和MacOS。Windows使用者可以使用WSL+vs code遠端開發,在wsl上配置開發學習環境,WSL相關教程請自行搜尋

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

最終效果圖

本文面向小白,但不會做到鉅細靡遺,不明白的地方可以自行搜尋(各個工具的官網,知乎,csdn,stack overflow,GitHub相關專案的issue頁面以及百度谷歌必應)也可在評論區問我,筆者盡力回答

本文采用完整的llvm工具鏈,韓駿大佬寫的code runner外掛為可選(注意code runner外掛可能會和python等外掛衝突)

本文程式設計環境配置依靠完整的llvm工具鏈,用clangd提供intellisence功能,lldb提供debug功能,以替代微軟官方的c/cpp外掛(此官方外掛目前效果仍不夠理想)

1 安裝visual studio code for mac

在巨硬的官網下載安裝對應版本即可:

Visual Studio Code - Code Editing。 Redefined

10 在macos/Linux上安裝clang-llvm工具鏈

OS X 自帶不完整的clang工具(似乎不包含clangd,而且自帶的工具版本未必是最新版),所以筆者選擇自己安裝一套完整的llvm,畢竟新工具一般bug更少,對C++20標準的支援也更全面

10。0 安裝homebrew——mac上的包管理工具(Linux發行版自帶包管理器,無需安裝)

這裡使用mac上著名的包管理工具homebrew下載,所以你首先要安裝homebrew。如果你是linux使用者,跳過此步驟

如果你能科學上網,可以按照homebrew官網提供的方法安裝

不過筆者建議直接用國內某大神的指令碼安裝,不但免去fq的繁瑣,安裝完成後還會幫你自動轉換為國內源:

首先開啟系統終端(如圖所示,若你的終端和筆者不同,游標前不是%,而是$,說明你的終端裡執行的shell是bash而非zsh,筆者建議切換成zsh終端)

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

我的終端

關於終端,控制檯和shell的關係:

https://

zhuanlan。zhihu。com/p/40

5527391

終端中輸入下面的命令以切換到zsh(如果是zsh切換到bash的話,只需把命令中的zsh改成bash就行),輸完命令後回車,然後關閉並重新開啟終端:

chsh -s /bin/zsh

此時你的終端裡執行的shell應該是zsh而非bash(游標左邊的提示符是個“%”而非“$”)

在終端中輸入下面的命令以安裝homebrew

/bin/zsh -c “$(curl -fsSL https://gitee。com/cunkai/HomebrewCN/raw/master/Homebrew。sh)”

按照說明進行操作(圖片來源於網路,侵刪):

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

安裝過程可能出現的問題見下面連結:

error。md · CunKai/HomebrewCN - Gitee。com

10。1 安裝並配置llvm的環境變數

在終端中輸入如下命令來安裝完整的llvm工具鏈

brew install llvm

Arch:

sudo pacman -S llvm clang lld lldb libc++

MacOS安裝完成後會提示類似資訊(Linux包管理器會幫你進行配置,無需手動新增):

==> Pouring llvm-12。0。1。big_sur。bottle。tar。gz

==> Caveats

To use the bundled libc++ please add the following LDFLAGS:

LDFLAGS=“-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib”

llvm is keg-only, which means it was not symlinked into /usr/local,

because macOS already provides this software and installing another version in

parallel can cause all kinds of trouble。

If you need to have llvm first in your PATH, run:

echo ‘export PATH=“/usr/local/opt/llvm/bin:$PATH”’ >> ~/。zshrc

For compilers to find llvm you may need to set:

export LDFLAGS=“-L/usr/local/opt/llvm/lib”

export CPPFLAGS=“-I/usr/local/opt/llvm/include”

==> Summary

/usr/local/Cellar/llvm/12。0。1: 9,791 files, 1。6GB

要求我們配置環境變數,兩種方法:

方法一

在終端鍵入

vi ~/。zshrc

開啟。zshrc配置檔案,此時不能編輯,需要按字母i鍵才進入編輯模式

然後輸入

export PATH=“/usr/local/opt/llvm/bin:$PATH”

export LDFLAGS=“-L/usr/local/opt/llvm/lib”

export CPPFLAGS=“-I/usr/local/opt/llvm/include”

然後按esc鍵退出編輯模式,回到普通模式,然後輸 :wq(直接按鍵即可,注意是英文冒號)回車

方法二

直接在終端中輸入命令

echo ‘export PATH=“/usr/local/opt/llvm/bin:$PATH”’ >> ~/。zshrc

echo ‘export LDFLAGS=“-L/usr/local/opt/llvm/lib”’ >> ~/。zshrc

echo ‘export CPPFLAGS=“-I/usr/local/opt/llvm/include”’ >> ~/。zshrc

以上兩種方法可能需要輸入password,注意輸入時終端不會顯示已輸入的password字元

10。10 驗證環境變數

在終端中輸入

llvm-dis ——version

應該顯示(截止2021/8/10,llvm版本號為12。0。1):

Homebrew LLVM version 12。0。1

Optimized build。

Default target: x86_64-apple-darwin20。6。0

Host CPU: skylake

同理輸入

lldb ——version

應該輸出

lldb version 12。0。1

同理

% lld ——version

lld is a generic driver。

Invoke ld。lld (Unix), ld64。lld (macOS), lld-link (Windows), wasm-ld (WebAssembly) instead

% clang ——version

Homebrew clang version 12。0。1

Target: x86_64-apple-darwin20。6。0

Thread model: posix

InstalledDir: /usr/local/opt/llvm/bin

% clang++ ——version

Homebrew clang version 12。0。1

Target: x86_64-apple-darwin20。6。0

Thread model: posix

InstalledDir: /usr/local/opt/llvm/bin

% clangd ——version

Homebrew clangd version 12。0。1

使用 which 命令驗證(如果你是透過homebrew安裝的llvm工具,輸出路徑應該都包含在/user/local目錄下):

% which llvm-dis

/usr/local/opt/llvm/bin/llvm-dis

% which clang++

/usr/local/opt/llvm/bin/clang++

% which clangd

/usr/local/opt/llvm/bin/clang

% which lld

/usr/local/opt/llvm/bin/clangd

% which clang

/usr/local/opt/llvm/bin/lld

% which lldb

/usr/local/opt/llvm/bin/lldb

11 在vs code上安裝相應外掛

因為面向初學者,暫不配置cmake等工具

安裝如下外掛(請確保微軟官方的c/c++外掛已解除安裝或禁用,否則會衝突)

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

code runner外掛可選

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

安裝codelldb外掛後,外掛會自動下載一個擴充套件包,這個package大機率下載失敗(不可描述的網路原因)

如果下載失敗,vsc會彈窗,提示你從對應連結下載,可以在瀏覽器中下載(如果還是下載失敗,多試幾次就行),下載完成後是一個拓展名為vsix的檔案,然後在vs code外掛頁面選擇

從vsix安裝(install from VSIX)即可

100 建立程式碼檔案結構

因為本文主要面向小白和新手,所以配置的是”學習環境“,而非大型c/cpp工程的“開發環境”,所以暫時不配置cmake工具(有時間會再寫一篇文章),本文更多是針對單個c/cpp檔案進行編譯執行和除錯,檔案結構相對簡單。

實際開發環境和學習環境有什麼區別呢?想想你寫第一個hello world程式時是怎樣寫的,你只寫了一個hello world。c檔案,然後點選IDE的綠色三角編譯執行,生成。exe或。out可執行檔案,語言學習環境開始大都是這樣的單檔案編譯執行除錯,或者是涉及到簡單的幾個標頭檔案和原始檔的組合這樣的多檔案結構。而實際專案的目錄結構往往非常複雜,甚至會出現多個工程專案組合在一起形成一個“解決方案”(visual studio)

我們的學習環境目錄結構應該便於建立一個新的原始檔,然後編譯 執行 除錯

筆者的解決方案:在mac中找一個合適的位置,新建一個名為code的資料夾(⚠️:無論Windows還是Linux還是osx,資料夾名稱和資料夾路徑儘量不要含有中文,否則你也不知道什麼時候會踩雷)

然後在code資料夾中新建一個cpp資料夾用來儲存你寫的c++程式(c語言同理,名稱可以根據個人喜好更改)

然後在cpp資料夾中新建兩個資料夾,名為Cpp_Single 和 Cpp_Multiple,分別適用於單個原始檔和簡單的多檔案,如圖所示

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

其它語言,如SageMath,python,latex,Java類似,多語言的工程專案放在multiple_language資料夾中

這裡為SageMath打個廣告,這是一個以替代4M(Matlab,Mathematica,Maple等)為目標的開源免費數學軟體,集成了目前主流的開源數學軟體包,功能相當強大。在圖論運算領域,比mathematica更優秀,sage採用類似於Python的語法,可以使用命令列,也可以使用Jupyter Notebook/JupyterLab,已支援win/mac/Linux平臺,也有線上版本

sage官網及中文文件:

sagemath

Sage V9。1 中文文件 - Sage 中文文件 1 文件

Cpp_Single資料夾中,可以按照自己的需求進行分類,比如你是個小白,要按照老師的課件寫程式碼,可以新建一個exercise資料夾,刷學校的oj,新建一個online judge資料夾,用c++刷力扣,新建個leetcode資料夾,等等。。。

上述course/online judge/leetcode資料夾中的原始檔,編譯除錯後會生成字尾為。out的可執行檔案(win上是exe),llvm還會生成一個字尾為。out。dSYM的資料夾,如果堆放在一起,會顯得非常混亂,所以在上述course/online judge/leetcode資料夾中再新建bin資料夾,之後按照筆者的配置,編譯時會自動在bin資料夾內生成可執行檔案及除錯資料夾,如圖所示:

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

101 配置json檔案(以c++為例)

如圖所示,在vscode中,開啟Cpp資料夾,並在此資料夾中新建名為。vscode的資料夾(先不要管。clang-format檔案)

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

在。vscode資料夾中,新建launch。json檔案、tasks。json檔案和settings。json檔案

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

編輯檔案內容為:

launch。json:

{

“version”

“0。2。0”

“configurations”

{

“name”

“(lldb) Launch”

//

配置名稱,將會在啟動配置的下拉選單中顯示

“type”

“lldb”

//

配置型別,不同程式語言不同,該項由CodeLLDB外掛提供

“request”

“launch”

//

可以為launch(啟動)或attach(附加)

“program”

“${fileDirname}/bin/${fileBasenameNoExtension}。out”

//

將要進行除錯的程式的路徑

“args”

[],

//

程式除錯時傳遞給程式的命令列引數,一般設為空

“stopAtEntry”

false

//

設為true時程式將暫停在程式入口處,相當於在main上打斷點

“cwd”

“${fileDirname}”

//

除錯程式時的工作目錄,此為工作區資料夾;改成${fileDirname

}

可變為檔案所在目錄

“environment”

[],

//

環境變數

“externalConsole”

false

//

使用單獨的cmd視窗,與其它IDE一致;為false時使用內建終端

“internalConsoleOptions”

“neverOpen”

//

如果不設為neverOpen,除錯時會跳到“除錯控制檯”選項卡,你應該不需要對gdb/lldb手動輸命令吧?

“MIMode”

“lldb”

//

指定連線的偵錯程式,可以為gdb或lldb,因為使用llvm工具鏈,所以使用lldb

“miDebuggerPath”

“/usr/local/opt/llvm/bin/lldb”

//

lldb偵錯程式路徑,透過在終端輸入

which

lldb

命令得到

“setupCommands”

{

//

模板自帶,好像可以更好地顯示STL容器的內容

“description”

“Enable pretty-printing for lldb”

“text”

“-enable-pretty-printing”

“ignoreFailures”

false

}

],

“preLaunchTask”

“Compile”

//

除錯前執行的任務,一般為編譯程式。與tasks。json的label相對應

}

}

tasks。json:

{

“version”

“2。0。0”

“tasks”

{

“label”

“Compile”

//

任務名稱,與launch。json的preLaunchTask相對應

“type”

“process”

//

可以為process或shell

“command”

“clang++”

//

要使用的編譯器,C語言用clang

“args”

“${file}”

“-g”

//

生成和除錯有關的資訊

如果加上該引數,編譯後不僅會生成。out可執行檔案,還會生成字尾為。out。dSYM的資料夾,如果不加,偵錯程式會忽略你設的斷點

“-o”

//

指定輸出檔名,os

X和Linux下不加該引數則預設輸出a。out,win下預設a。exe

“${fileDirname}/bin/${fileBasenameNoExtension}。out”

//

指定編譯生成結果(。out檔案和。out。dSYM資料夾)

“-Wall”

//

開啟額外警告

“-stdlib=libc++”

//

靜態連結libc++,Linux下似乎會出錯,出錯的話刪掉這行就行

“-std=c++17”

//

這裡採用c++

17

標準(推薦),C語言改成

“-std=c11”

],

//

編譯的命令,其實相當於VSC幫你在終端中輸了這一串東西

“group”

{

“kind”

“build”

“isDefault”

true

//

不為true時command

shift

B快捷鍵就要手動選擇了

},

“options”

{

“cwd”

“${fileDirname}”

},

“presentation”

{

“echo”

true

“reveal”

“always”

//

執行任務時是否跳轉到終端面板,可以為always,silent,never。具體參見VSC的文件,即使設為never,手動點進去還是可以看到

“focus”

false

//

設為true後可以使執行task時焦點聚集在終端,但對編譯C/C++來說,設為true沒有意義

“panel”

“shared”

//

不同的檔案的編譯資訊共享一個終端面板

}

}

}

settings。json:

{

“editor。snippetSuggestions”

“top”

//

(可選)snippets顯示在補全列表頂端,預設是inline

“files。defaultLanguage”

“cpp”

//

ctrl+N新建檔案後預設的語言,c語言改成c即可

“editor。suggest。snippetsPreventQuickSuggestions”

false

//

clangd的snippets有很多的跳轉點,不用這個就必須手動觸發Intellisense了

}

以上是針對Cpp資料夾的設定

然後開啟全域性的settings。json檔案(透過command+shift+p快捷鍵開啟控制面板,然後輸入並執行 Preferences: Open Settings(JSON)命令),加入以下內容以配置clangd和code runner外掛(部分是我的個人配置,可按註釋自行選擇)

//

禁用VSC遠端報告(推薦!)

“telemetry。enableTelemetry”

false

//

刪除檔案確認

“explorer。confirmDelete”

false

//

控制是否顯示縮圖

“editor。minimap。enabled”

false

//

設定編輯區字型大小

“editor。fontSize”

16

//設定編輯區字型

“editor。fontFamily”

“JetBrains Mono”

“editor。fontLigatures”

true

“editor。formatOnPaste”

true

“editor。formatOnSave”

true

“editor。formatOnType”

true

“editor。tabSize”

4

“editor。insertSpaces”

true

“editor。semanticHighlighting。enabled”

true

“terminal。integrated。fontSize”

14

//

設定檔案自動儲存為afterDelay

(預設

1000

ms)

“files。autoSave”

“afterDelay”

“workbench。settings。editor”

“json”

“[log]”

{

“editor。fontSize”

15

}

“extensions。ignoreRecommendations”

true

“explorer。confirmDragAndDrop”

false

//

code

runner

“code-runner。runInTerminal”

true

//

設定成false會在“輸出”中輸出,無法輸入

“code-runner。saveFileBeforeRun”

true

//

run

code前儲存

“code-runner。preserveFocus”

false

//

若為

false

,run

code後游標會聚焦到終端上。如果需要頻繁輸入資料可設為

false

“code-runner。clearPreviousOutput”

true

//

每次run

code前清空屬於code

runner的終端訊息,預設

false

“code-runner。ignoreSelection”

true

//

預設為

false

,效果是滑鼠選中一塊程式碼後可以單獨執行,但C是編譯型語言,不適合這樣用

“code-runner。fileDirectoryAsCwd”

true

//

將code

runner終端的工作目錄切換到檔案目錄再執行,對依賴cwd的程式產生影響;如果為

false

,executorMap要加cd

$dir

“code-runner。executorMap”

{

“c”

“clang $fileName -g -o $dir/bin/$fileNameWithoutExt。out -Wall -fcolor-diagnostics && $dir/bin/$fileNameWithoutExt。out”

“cpp”

“clang++ $fileName -g -o $dir/bin/$fileNameWithoutExt。out -Wall -fcolor-diagnostics && $dir/bin/$fileNameWithoutExt。out”

}

//

右鍵run

code時執行的命令;未註釋的僅適用於PowerShell(Win

10

預設)和pwsh,檔名中有空格也可以編譯執行;註釋掉的適用於cmd(win

7

預設)、PS和bash,但檔名中有空格時無法執行

//

C

&

C++

“clangd。arguments”

//

在後臺自動分析檔案(基於complie_commands)

“——background-index”

//

標記compelie_commands。json檔案的目錄位置

//

關於complie_commands。json如何生成可見我上一篇文章的末尾

“——compile-commands-dir=build”

//

同時開啟的任務數量

“-j=12”

//

“——folding-ranges”

//

告訴clangd用那個clang進行編譯,路徑參考which

clang++的路徑

“——query-driver=/usr/local/opt/llvm/bin/clang++”

//

clang-tidy功能

“——clang-tidy”

“——clang-tidy-checks=performance-*,bugprone-*”

//

全域性補全(會自動補充標頭檔案)

“——all-scopes-completion”

//

更詳細的補全內容

“——completion-style=detailed”

“——function-arg-placeholders”

//

補充標頭檔案的形式

“——header-insertion=iwyu”

//

pch最佳化的位置

“——pch-storage=memory”

//

clangd路徑,透過mac終端

which

clangd

命令得到

“clangd。path”

“/usr/local/opt/llvm/bin/clangd”

“editor。semanticTokenColorCustomizations”

{

“enabled”

true

“rules”

{

//

函式引數

“parameter”

“#306b72”

//

類或者結構體

“class”

{

“fontStyle”

“bold”

“foreground”

“#729de3”

},

//

普通函式

“function”

{

“foreground”

“#e5b124”

},

//

臨時變數

“variable”

“#26cdca”

//

enum的名字(enum的成員似乎並沒有可以配置的)

“enum”

“#397797”

//

enum子項,需要clangd12以上

“enumMember”

“#397797”

//

“macro”

{

“foreground”

“#8f5daf”

“fontStyle”

“bold”

},

//

成員函式

“method”

{

“foreground”

“#e5b124”

“fontStyle”

“underline”

},

//

clangd12之後會將宏關閉的部分標為comment

“comment”

“#505050”

//

名稱空間

“namespace”

{

“foreground”

“#00d780”

“fontStyle”

“bold”

},

//

只讀量加粗

“*。readonly”

{

“fontStyle”

“bold”

},

//

只讀量等效為宏

“variable。readonly”

{

“foreground”

“#8f5daf”

“fontStyle”

“bold”

},

//

靜態量(靜態變數,靜態函式)

“*。static”

{

“fontStyle”

“italic”

},

//

成員變數,似乎需要clangd12以上

“property”

{

“foreground”

“#7ca6b7”

“fontStyle”

“underline”

},

}

}

}

PS:如果你的VSC出現”XXX extension is loading“且一直無法載入完成的情況,可以參考我的這個帖子:

https://

zhuanlan。zhihu。com/p/39

2630809

然後在vscode開啟的工作空間根目錄中新增。clang-format檔案,編輯。clang-format檔案內容如下(可按照自己的喜好更改):

# 語言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto

Language: Cpp

# BasedOnStyle: LLVM

# 訪問說明符(public、private等)的偏移

AccessModifierOffset: -4

# 開括號(開圓括號、開尖括號、開方括號)後的對齊: Align, DontAlign, AlwaysBreak(總是在開括號後換行)

AlignAfterOpenBracket: Align

# 連續賦值時,對齊所有等號

AlignConsecutiveAssignments: false

# 連續宣告時,對齊所有宣告的變數名

AlignConsecutiveDeclarations: false

# 右對齊逃脫換行(使用反斜槓換行)的反斜槓

AlignEscapedNewlines: Right

# 水平對齊二元和三元表示式的運算元

AlignOperands: true

# 對齊連續的尾隨的註釋

AlignTrailingComments: true

# 不允許函式宣告的所有引數在放在下一行

AllowAllParametersOfDeclarationOnNextLine: false

# 不允許短的塊放在同一行

AllowShortBlocksOnASingleLine: true

# 允許短的case標籤放在同一行

AllowShortCaseLabelsOnASingleLine: true

# 允許短的函式放在同一行: None, InlineOnly(定義在類中), Empty(空函式), Inline(定義在類中,空函式), All

AllowShortFunctionsOnASingleLine: None

# 允許短的if語句保持在同一行

AllowShortIfStatementsOnASingleLine: true

# 允許短的迴圈保持在同一行

AllowShortLoopsOnASingleLine: true

# 總是在返回型別後換行: None, All, TopLevel(頂級函式,不包括在類中的函式),

# AllDefinitions(所有的定義,不包括宣告), TopLevelDefinitions(所有的頂級函式的定義)

AlwaysBreakAfterReturnType: None

# 總是在多行string字面量前換行

AlwaysBreakBeforeMultilineStrings: false

# 總是在template聲明後換行

AlwaysBreakTemplateDeclarations: true

# false表示函式實參要麼都在同一行,要麼都各自一行

BinPackArguments: true

# false表示所有形參要麼都在同一行,要麼都各自一行

BinPackParameters: true

# 大括號換行,只有當BreakBeforeBraces設定為Custom時才有效

BraceWrapping:

# class定義後面

AfterClass: false

# 控制語句後面

AfterControlStatement: false

# enum定義後面

AfterEnum: false

# 函式定義後面

AfterFunction: false

# 名稱空間定義後面

AfterNamespace: false

# struct定義後面

AfterStruct: false

# union定義後面

AfterUnion: false

# extern之後

AfterExternBlock: false

# catch之前

BeforeCatch: false

# else之前

BeforeElse: false

# 縮排大括號

IndentBraces: false

# 分離空函式

SplitEmptyFunction: false

# 分離空語句

SplitEmptyRecord: false

# 分離空名稱空間

SplitEmptyNamespace: false

# 在二元運算子前換行: None(在運算子後換行), NonAssignment(在非賦值的運算子前換行), All(在運算子前換行)

BreakBeforeBinaryOperators: NonAssignment

# 在大括號前換行: Attach(始終將大括號附加到周圍的上下文), Linux(除函式、名稱空間和類定義,與Attach類似),

# Mozilla(除列舉、函式、記錄定義,與Attach類似), Stroustrup(除函式定義、catch、else,與Attach類似),

# Allman(總是在大括號前換行), GNU(總是在大括號前換行,並對於控制語句的大括號增加額外的縮排), WebKit(在函式前換行), Custom

# 注:這裡認為語句塊也屬於函式

BreakBeforeBraces: Custom

# 在三元運算子前換行

BreakBeforeTernaryOperators: false

# 在建構函式的初始化列表的冒號後換行

BreakConstructorInitializers: AfterColon

#BreakInheritanceList: AfterColon

BreakStringLiterals: false

# 每行字元的限制,0表示沒有限制

ColumnLimit: 0

CompactNamespaces: true

# 建構函式的初始化列表要麼都在同一行,要麼都各自一行

ConstructorInitializerAllOnOneLineOrOnePerLine: false

# 建構函式的初始化列表的縮排寬度

ConstructorInitializerIndentWidth: 4

# 延續的行的縮排寬度

ContinuationIndentWidth: 4

# 去除C++11的列表初始化的大括號{後和}前的空格

Cpp11BracedListStyle: true

# 繼承最常用的指標和引用的對齊方式

DerivePointerAlignment: false

# 固定名稱空間註釋

FixNamespaceComments: true

# 縮排case標籤

IndentCaseLabels: false

IndentPPDirectives: None

# 縮排寬度

IndentWidth: 4

# 函式返回型別換行時,縮排函式宣告或函式定義的函式名

IndentWrappedFunctionNames: false

# 保留在塊開始處的空行

KeepEmptyLinesAtTheStartOfBlocks: false

# 連續空行的最大數量

MaxEmptyLinesToKeep: 1

# 名稱空間的縮排: None, Inner(縮排巢狀的名稱空間中的內容), All

NamespaceIndentation: None

# 指標和引用的對齊: Left, Right, Middle

PointerAlignment: Right

# 允許重新排版註釋

ReflowComments: true

# 允許排序#include

SortIncludes: false

# 允許排序 using 宣告

SortUsingDeclarations: false

# 在C風格型別轉換後新增空格

SpaceAfterCStyleCast: false

# 在Template 關鍵字後面新增空格

SpaceAfterTemplateKeyword: true

# 在賦值運算子之前新增空格

SpaceBeforeAssignmentOperators: true

# SpaceBeforeCpp11BracedList: true

# SpaceBeforeCtorInitializerColon: true

# SpaceBeforeInheritanceColon: true

# 開圓括號之前新增一個空格: Never, ControlStatements, Always

SpaceBeforeParens: ControlStatements

# SpaceBeforeRangeBasedForLoopColon: true

# 在空的圓括號中新增空格

SpaceInEmptyParentheses: false

# 在尾隨的評論前新增的空格數(只適用於//)

SpacesBeforeTrailingComments: 1

# 在尖括號的<後和>前新增空格

SpacesInAngles: false

# 在C風格型別轉換的括號中新增空格

SpacesInCStyleCastParentheses: false

# 在容器(ObjC和JavaScript的陣列和字典等)字面量中新增空格

SpacesInContainerLiterals: true

# 在圓括號的(後和)前新增空格

SpacesInParentheses: false

# 在方括號的[後和]前新增空格,lamda表示式和未指明大小的陣列的宣告不受影響

SpacesInSquareBrackets: false

# 標準: Cpp03, Cpp11, Auto

Standard: Cpp11

# tab寬度

TabWidth: 4

# 使用tab字元: Never, ForIndentation, ForContinuationAndIndentation, Always

UseTab: Never

110 測試環境

在exercise資料夾中新建hello。cpp原始檔(別忘了字尾),輸入以下程式碼:

#include

#include

#include

using

namespace

std;

int

main(int

argc,

char

**argv)

{

vector

msg{

“hello”

“C++”

“語言”

“world”

“from”

“VS Code”

}

for

(const

string

&word

msg)

{

cout

<<

word

<<

“ ”

}

cout

<<

endl;

return

0

}

Command + shift + B 快捷鍵 編譯原始檔(建議以後擼碼時不時按一下編譯快捷鍵,可以儘早發現問題)

Ctrl+f5快捷鍵 編譯執行程式碼但不除錯

Fn+f5快捷鍵 編譯並除錯程式碼

如圖,滑鼠右鍵,點選format document,vscode可能提示選擇用於格式化程式碼段外掛,選擇clangd即可。也可以直接按快捷鍵command+s格式化程式碼檔案

Visual Studio Code 配置 CC++ 開發環境最佳實踐(VSCode+Clang+Clangd+LLDB)

111 推薦主題/圖示/字型

主題外掛:Dracula Official

圖示外掛:Material Theme Icons

字型:個人推薦Operator Mono字型

為VSCode 設定好看的字型:Operator Mono

1000 參考

https://

zhuanlan。zhihu。com/p/15

8789953

https://

zhuanlan。zhihu。com/p/36

4518020

譚九鼎:Visual Studio Code 如何編寫執行 C、C++ 程式?

https://

zhuanlan。zhihu。com/p/35

6143396

標簽: false  LLVM  true  local  usr