道阻且長,行則將至,埋頭苦干,不鳴則已,一鳴驚人!加油,騷年!
文章目錄
- 1 參考資料
- 2 簡要說明
- 3 正文記錄
- 3.1 軟體安裝
- 3.2 擴展插件安裝
- 3.3 C/C++ 編譯器安裝
- 3.4 VSCode C/C++ 環境配置
- 3.4.1 C++ 編譯環境配置
- 3.4.2 C 編譯環境配置
- 4 編譯程式測驗
- 5 總結
1 參考資料
-
Visual Studio Code 如何撰寫運行 C、C++ 程式? - 譚九鼎的回答 - 知乎(https://www.zhihu.com/question/30315894/answer/154979413)
-
vscode 配置 C/C++ 編譯環境 教程(https://blog.csdn.net/qq_43041976/article/details/100542557)
??謝謝各位前輩的教程幫助,十分感激!
2 簡要說明
??首先要明白,VSCode 僅僅只是一個文本編輯器而已,類似記事本、 Sublime Text 等,本身不具備編譯器的功能,
??但是 VSCode 可以通過安裝各種擴展插件,實作代碼編譯、除錯、運行等功能,
??我覺得首先概念要正確,然后才能好好正視這個軟體,參考知憾訓答解釋如下:
VSC 只是一個純文本編輯器( editor ),不是 IDE (集成開發環境),不含編譯器( compiler )和許多其它功能,所以編譯器要自己裝好,
3 正文記錄
3.1 軟體安裝
??VSCode 軟體,直接去官網下載,然后傻瓜式一路 next 安裝即可;
??官網鏈接:https://code.visualstudio.com/
3.2 擴展插件安裝
??由于參考教程,沒有說必須要哪些插件,我就根據我已安裝的,說一下我認為需要的插件
- C/C++ :這個插件是使用 C/C++ 語言所必須的;
- Code Runner :這個插件主要是為了更方便的運行代碼;
- Chinese (Simplified) Language Pack for Visual Studio Code :這個插件主要是為了切換軟體語言為簡體中文;
??奉上插件截圖如下,供參考

3.3 C/C++ 編譯器安裝
??首先需要去官網下載編譯器的安裝包,安裝版本:選最新版本中的 x86_64-posix-seh
??下載網址:https://sourceforge.net/projects/mingw-w64/files/
??以我目前看到的網頁,截圖示例如下:

??接下來就是編譯器的安裝配置程序
-
使用解壓工具解壓下載下來的壓縮包,我使用的解壓工具為:WinRAR ;我下載的檔案名為:x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z
-
將解壓完畢后的檔案夾,全部放到 C 盤,為了方便,我直接放在 C 盤下,也就是我的路徑為:C:\mingw64

- 接著要配置環境變數
- 右鍵 “此電腦” ,選擇 “屬性”
- 高級系統設定
- 高級,環境變數
- 可以修改當前用戶的環境變數,也可以直接修改系統變數;我是修改系統變數;雙擊 Path 即可查看當前環境變數內容
- 接下來可以選擇 “新建” ,“瀏覽” 選擇編譯器所在路徑,然后確認保存即可

-
C/C++ 編譯器驗證
-
win + R 打開命令列,輸入 cmd 運行程式,輸入 gcc ,回車,此時報錯是因為我們沒有指定需編譯的檔案,如果是其他錯誤,那么很可能是環境變數沒配置好,

-
查看 gcc 版本,使用命令:gcc -v

-
需要與剛剛下載的軟體版本對應
gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
3.4 VSCode C/C++ 環境配置
??由于區分 C/C++ ,因此兩個的組態檔是不一樣的,參考教程建議我們的 C C++ 程式分開存放,分別存放到兩個不同的檔案夾,這樣可以單獨配置環境,
??參考我的檔案夾示例如下:

3.4.1 C++ 編譯環境配置
??首先在 C++ 的程式檔案夾下,新建一個名為 .vscode 的隱藏檔案夾,然后分別新建如下三個檔案
- launch.json ,配置內容如下:
{
"version": "0.2.0",
"configurations": [{
"name": "(gdb) Launch", // 配置名稱,將會在啟動配置的下拉選單中顯示
"type": "cppdbg", // 配置型別,cppdbg對應cpptools提供的除錯功能;可以認為此處只能是cppdbg
"request": "launch", // 請求配置型別,可以為launch(啟動)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 將要進行除錯的程式的路徑
"args": [], // 程式除錯時傳遞給程式的命令列引數,一般設為空即可
"stopAtEntry": false, // 設為true時程式將暫停在程式入口處,相當于在main上打斷點
"cwd": "${workspaceFolder}", // 除錯程式時的作業目錄,此為作業區檔案夾;改成${fileDirname}可變為檔案所在目錄
"environment": [], // 環境變數
"externalConsole": true, // 使用單獨的cmd視窗,與其它IDE一致;為false時使用內置終端
"internalConsoleOptions": "neverOpen", // 如果不設為neverOpen,除錯時會跳到“除錯控制臺”選項卡,你應該不需要對gdb手動輸命令吧?
"MIMode": "gdb", // 指定連接的除錯器,可以為gdb或lldb,但我沒試過lldb
"miDebuggerPath": "C:/mingw64/bin/gdb.exe", // 除錯器路徑,Windows下后綴不能省略,Linux下則不要
"setupCommands": [
{ // 模板自帶,好像可以更好地顯示STL容器的內容,具體作用自行Google
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "Compile" // 除錯會話開始前執行的任務,一般為編譯程式,與tasks.json的label相對應
}]
}
- settings.json ,配置內容如下:
{
"files.defaultLanguage": "c++", // ctrl+N新建檔案后默認的語言
"editor.formatOnType": true, // 輸入分號(C/C++的陳述句結束標識)后自動格式化當前這一行的代碼
"editor.suggest.snippetsPreventQuickSuggestions": false, // clangd的snippets有很多的跳轉點,不用這個就必須手動觸發Intellisense了
"editor.acceptSuggestionOnEnter": "off", // 我個人的習慣,按回車時一定是真正的換行,只有tab才會接受Intellisense
// "editor.snippetSuggestions": "top", // (可選)snippets顯示在補全串列頂端,默認是inline
"code-runner.runInTerminal": true, // 設定成false會在“輸出”中輸出,無法輸入
"code-runner.executorMap": {
"c": "gcc '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK && &'./$fileNameWithoutExt.exe'",
"cpp": "g++ '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -static-libgcc -std=c++14 -fexec-charset=GBK && &'./$fileNameWithoutExt.exe'"
// "c": "gcc $fileName -o $fileNameWithoutExt.exe -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK && $dir$fileNameWithoutExt.exe",
// "cpp": "g++ $fileName -o $fileNameWithoutExt.exe -Wall -O2 -m64 -static-libgcc -std=c++14 -fexec-charset=GBK && $dir$fileNameWithoutExt.exe"
}, // 右鍵run code時運行的命令;未注釋的僅適用于PowerShell(Win10默認)和pwsh,檔案名中有空格也可以編譯運行;注釋掉的適用于cmd(win7默認)、PS和bash,但檔案名中有空格時無法運行
"code-runner.saveFileBeforeRun": true, // run code前保存
"code-runner.preserveFocus": true, // 若為false,run code后游標會聚焦到終端上,如果需要頻繁輸入資料可設為false
"code-runner.clearPreviousOutput": false, // 每次run code前清空屬于code runner的終端訊息,默認false
"code-runner.ignoreSelection": true, // 默認為false,效果是滑鼠選中一塊代碼后可以單獨執行,但C是編譯型語言,不適合這樣用
"code-runner.fileDirectoryAsCwd": true, // 將code runner終端的作業目錄切換到檔案目錄再運行,對依賴cwd的程式產生影響;如果為false,executorMap要加cd $dir
"C_Cpp.clang_format_sortIncludes": true, // 格式化時調整include的順序(按字母排序)
}
- tasks.json ,配置內容如下:
{
"version": "2.0.0",
"tasks": [{
"label": "Compile", // 任務名稱,與launch.json的preLaunchTask相對應
"command": "g++", // 要使用的編譯器,C++用g++
"args": [
"${file}",
"-o", // 指定輸出檔案名,不加該引數則默認輸出a.exe,Linux下默認a.out
"${fileDirname}/${fileBasenameNoExtension}.exe",
"-g", // 生成和除錯有關的資訊
"-m64", // 不知為何有時會生成16位應用而無法運行,加上此條可強制生成64位的
"-Wall", // 開啟額外警告
"-static-libgcc", // 靜態鏈接libgcc,一般都會加上
"-fexec-charset=GBK", // 生成的程式使用GBK編碼,不加這潭訓導致Win下輸出中文亂碼;繁體系統改成BIG5
"-std=c++14", // 要用的語言標準,根據自己的需要修改,c++可用c++14,c11
], // 編譯的命令,其實相當于VSC幫你在終端中輸了這些東西
"type": "process", // process是把預定義變數和轉義決議后直接全部傳給command;shell相當于先打開shell再輸入命令,所以args還會經過shell再決議一遍
"group": {
"kind": "build",
"isDefault": true // 不為true時ctrl shift B就要手動選擇了
},
"presentation": {
"echo": true,
"reveal": "always", // 執行任務時是否跳轉到終端面板,可以為always,silent,never,具體參見VSC的檔案
"focus": false, // 設為true后可以使執行task時焦點聚集在終端,但對編譯C/C++來說,設為true沒有意義
"panel": "shared" // 不同的檔案的編譯資訊共享一個終端面板
},
"problemMatcher":"$gcc" // 捕捉編譯時終端里的報錯資訊到問題面板中,修改代碼后需要重新編譯才會再次觸發
// 本來有Lint,再開problemMatcher就有雙重報錯,但MinGW的Lint效果實在太差了;用Clang可以注釋掉
}]
}
3.4.2 C 編譯環境配置
??同樣在 C 的程式檔案夾下,新建一個名為 .vscode 的隱藏檔案夾,然后分別新建如下三個檔案
- launch.json ,配置內容如下:
{
"version": "0.2.0",
"configurations": [{
"name": "(gdb) Launch", // 配置名稱,將會在啟動配置的下拉選單中顯示
"type": "cppdbg", // 配置型別,cppdbg對應cpptools提供的除錯功能;可以認為此處只能是cppdbg
"request": "launch", // 請求配置型別,可以為launch(啟動)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 將要進行除錯的程式的路徑
"args": [], // 程式除錯時傳遞給程式的命令列引數,一般設為空即可
"stopAtEntry": false, // 設為true時程式將暫停在程式入口處,相當于在main上打斷點
"cwd": "${workspaceFolder}", // 除錯程式時的作業目錄,此為作業區檔案夾;改成${fileDirname}可變為檔案所在目錄
"environment": [], // 環境變數
"externalConsole": true, // 使用單獨的cmd視窗,與其它IDE一致;為false時使用內置終端
"internalConsoleOptions": "neverOpen", // 如果不設為neverOpen,除錯時會跳到“除錯控制臺”選項卡,你應該不需要對gdb手動輸命令吧?
"MIMode": "gdb", // 指定連接的除錯器,可以為gdb或lldb,但我沒試過lldb
"miDebuggerPath": "C:/mingw64/bin/gdb.exe", // 除錯器路徑,Windows下后綴不能省略,Linux下則不要
"setupCommands": [
{ // 模板自帶,好像可以更好地顯示STL容器的內容,具體作用自行Google
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "Compile" // 除錯會話開始前執行的任務,一般為編譯程式,與tasks.json的label相對應
}]
}
- settings.json ,配置內容如下:
{
"files.defaultLanguage": "c", // ctrl+N新建檔案后默認的語言
"editor.formatOnType": true, // 輸入分號(C/C++的陳述句結束標識)后自動格式化當前這一行的代碼
"editor.suggest.snippetsPreventQuickSuggestions": false, // clangd的snippets有很多的跳轉點,不用這個就必須手動觸發Intellisense了
"editor.acceptSuggestionOnEnter": "off", // 我個人的習慣,按回車時一定是真正的換行,只有tab才會接受Intellisense
// "editor.snippetSuggestions": "top", // (可選)snippets顯示在補全串列頂端,默認是inline
"code-runner.runInTerminal": true, // 設定成false會在“輸出”中輸出,無法輸入
"code-runner.executorMap": {
"c": "gcc '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK && &'./$fileNameWithoutExt.exe'",
"cpp": "g++ '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -static-libgcc -std=c++14 -fexec-charset=GBK && &'./$fileNameWithoutExt.exe'"
// "c": "gcc $fileName -o $fileNameWithoutExt.exe -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK && $dir$fileNameWithoutExt.exe",
// "cpp": "g++ $fileName -o $fileNameWithoutExt.exe -Wall -O2 -m64 -static-libgcc -std=c++14 -fexec-charset=GBK && $dir$fileNameWithoutExt.exe"
}, // 右鍵run code時運行的命令;未注釋的僅適用于PowerShell(Win10默認)和pwsh,檔案名中有空格也可以編譯運行;注釋掉的適用于cmd(win7默認)、PS和bash,但檔案名中有空格時無法運行
"code-runner.saveFileBeforeRun": true, // run code前保存
"code-runner.preserveFocus": true, // 若為false,run code后游標會聚焦到終端上,如果需要頻繁輸入資料可設為false
"code-runner.clearPreviousOutput": false, // 每次run code前清空屬于code runner的終端訊息,默認false
"code-runner.ignoreSelection": true, // 默認為false,效果是滑鼠選中一塊代碼后可以單獨執行,但C是編譯型語言,不適合這樣用
"code-runner.fileDirectoryAsCwd": true, // 將code runner終端的作業目錄切換到檔案目錄再運行,對依賴cwd的程式產生影響;如果為false,executorMap要加cd $dir
"C_Cpp.clang_format_sortIncludes": true, // 格式化時調整include的順序(按字母排序)
}
- tasks.json ,配置內容如下:
{
"version": "2.0.0",
"tasks": [{
"label": "Compile", // 任務名稱,與launch.json的preLaunchTask相對應
"command": "gcc", // 要使用的編譯器,C++用g++
"args": [
"${file}",
"-o", // 指定輸出檔案名,不加該引數則默認輸出a.exe,Linux下默認a.out
"${fileDirname}/${fileBasenameNoExtension}.exe",
"-g", // 生成和除錯有關的資訊
"-m64", // 不知為何有時會生成16位應用而無法運行,加上此條可強制生成64位的
"-Wall", // 開啟額外警告
"-static-libgcc", // 靜態鏈接libgcc,一般都會加上
"-fexec-charset=GBK", // 生成的程式使用GBK編碼,不加這潭訓導致Win下輸出中文亂碼;繁體系統改成BIG5
"-std=c++14", // 要用的語言標準,根據自己的需要修改,c++可用c++14,c11
], // 編譯的命令,其實相當于VSC幫你在終端中輸了這些東西
"type": "process", // process是把預定義變數和轉義決議后直接全部傳給command;shell相當于先打開shell再輸入命令,所以args還會經過shell再決議一遍
"group": {
"kind": "build",
"isDefault": true // 不為true時ctrl shift B就要手動選擇了
},
"presentation": {
"echo": true,
"reveal": "always", // 執行任務時是否跳轉到終端面板,可以為always,silent,never,具體參見VSC的檔案
"focus": false, // 設為true后可以使執行task時焦點聚集在終端,但對編譯C/C++來說,設為true沒有意義
"panel": "shared" // 不同的檔案的編譯資訊共享一個終端面板
},
"problemMatcher":"$gcc" // 捕捉編譯時終端里的報錯資訊到問題面板中,修改代碼后需要重新編譯才會再次觸發
// 本來有Lint,再開problemMatcher就有雙重報錯,但MinGW的Lint效果實在太差了;用Clang可以注釋掉
}]
}
4 編譯程式測驗
??新建一個 CPP 檔案,進行 C++ 編譯器的測驗,測驗檔案如下:
#include <iostream>
using namespace std;
int main(int argc, const char** argv) {
std::cout << "Hello world!" << endl;
getchar(); // 避免視窗一閃而過
getchar(); // 避免視窗一閃而過
return 0;
}
??測驗程序,可以直接按下 F5 ,進入 除錯模式 ,也可以直接在代碼中,右鍵,選擇 Run Code ,進行命令列輸出測驗,

??我直接使用 F5 ,除錯輸出結果如下

5 總結
??整個安裝程序到這里就結束啦,我原來一直覺得 VSCode 配置 C/C++ 編譯環境,怎么這么麻煩,直到看到了 譚九鼎 前輩的那篇知憾訓答,覺得很棒,把組態檔的內容講解的十分詳細,然后我就按照教程一步一步來,竟然成了!哈哈,太感謝前輩啦,
??程序簡要總結一下
- 克服自己的心理抗拒,這款軟體,這么多人推薦用,肯定有他好用的地方,不會說上手很難;
- 下載好合適的 Windows 下的 C/C++ 編譯器,很重要;
- 配置好編譯器的環境變數,也很重要;這樣才能在全域,像使用命令列一樣,使用編譯器;
- 最后就是三個組態檔,我目前的理解還是有限,但最起碼成了,先做記錄,隨著后邊深入學習了解,相信會更加熟練的!
- 加油啊,騷年!!!
如果文章內容有誤,麻煩評論/私信多多指教!如果覺得文章內容還不錯,記得一鍵四連哦(點贊、收藏、留言、關注),如果您能點個關注,那就是對我最大的鼓勵,也將是我創作的動力,謝謝您嘞!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/234296.html
標籤:其他
