眾所周知VSCode是全宇宙最好用的編輯器 (霧
配置了很久,今日終於配置完成了,還是有點麻煩的,本文是為了方便一些不懂怎么配置的小白,以及還有一些美化教程。
一、安裝
Visual Studio Code是一款免費而且強大的編輯器,你可以直接在官方進行下載,本文是針對Windows系統進行安裝使用。
官網:https://code.visualstudio.com/
下載安裝即可,安裝時候記得勾選添加到環境變量選項。
二、語言
新版VSCode的默認語言是英語,我們首先將其更改為中文
按快捷鍵Ctrl+Shift+P打開命令窗口,搜索>lang
然后打開下面這個選項Configure Display Language,如下圖
打開后然后如下圖
"en"即為英語,將其修改為"zh-CN"然后重新啟動VSCode即可。
若是沒有成功修改語言,則是沒有下載中文語言包,我們可以在擴展中搜索Chinese,安裝第一個擴展再次重新啟動即可。如下圖
三、編譯配置
首先我們先試試如何創建一個C++文件,左上角打開文件夾,打開一個文件,注意文件路徑不能有中文,如下圖
然后就可以在文件夾內新建文件了。如下圖
然后就可以新建一個cpp文件進行編寫,但進行到這里僅僅只是能夠編寫代碼而已,因為VSCode並不是一個IDE,他只是一個編輯器,所以我們還得自己配置編譯環境,我們首先在擴展商店安裝如下擴展(不是一定要安裝下面的,但是我推薦都安裝一下)。
- C/C++
- Code Runner
- C/C++ Advanced Lint
- C++ Intellisense
- C/C++ Clang Command Adapter
- C/C++ Snippets
- C++ Algorithm Mnemonics
- Native Debug
具體每個擴展的功能都在安裝界面有介紹。
然后我們安裝編譯環境,這里我安裝的是MingGW64+Clang。
- LLVM Download Page Pre-Built Binaries中的Clang for Windows (64-bit),不需要下.sig文件
- MinGW-w64 - for 32 and 64 bit Windows
Clang下載好了以后安裝。安裝時選擇Add LLVM to the system PATH for all users。安裝完了以后可能會彈出cmd說MSVC integration install failed。這個是因為Clang默認使用的是msvc的工具鏈,而我們安裝了MinGW,所以就不用管這個提示。
MinGW安裝的時候Architecture選x86_64,裝好以后把東西全部復制到Clang的文件夾里去,還要自己把MinGW的bin文件夾加到環境變量path中。
打開CMD輸入clang -v如果顯示版本號即安裝完成了。如下圖
然后就可以進行編譯了,我們編寫了一個hello.cpp,然后按下面的操作進行編譯運行
運行成功,此時我們以及可以通過VSCode進行C/C++代碼編寫以及運行。
后面我們可以配置幾個.json文件修改一些編譯參數。
先創建一個你打算存放代碼的文件夾(稱作工作區),路徑不能含有中文和空格。然后打開VS Code,選打開文件夾,選擇剛才那個文件夾,點VS Code上的新建文件夾,名稱為.vscode,然后創建 launch.json,tasks.json,settings.json,c_cpp_properties.json放到.vscode文件夾下,注意在VSCode進行創建.vscode文件夾,至於為什么你可以試試直接在文件中創建(Windows不支持文件夾開頭為.)。
如下圖
launch.json代碼:
該文件除stopAtEntry可根據自己喜好修改外,無需更改。除非你不用windows,則可以用llvm調試

// https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", // 配置名稱,將會在啟動配置的下拉菜單中顯示 "type": "cppdbg", // 配置類型,這里只能為cppdbg "request": "launch", // 請求配置類型,可以為launch(啟動)或attach(附加) "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 將要進行調試的程序的路徑 "args": [], // 程序調試時傳遞給程序的命令行參數,一般設為空即可 "stopAtEntry": false, // 設為true時程序將暫停在程序入口處,我一般設置為true "cwd": "${workspaceRoot}", // 調試程序時的工作目錄 "environment": [], // (環境變量?) "externalConsole": true, // 調試時是否顯示控制台窗口,一般設置為true顯示控制台 "MIMode": "gdb", // 指定連接的調試器,可以為gdb或lldb。但目前lldb在windows下沒有預編譯好的版本。 "miDebuggerPath": "gdb.exe", // 調試器路徑。 "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": false } ], "preLaunchTask": "Compile" // 調試會話開始前執行的任務,一般為編譯程序。與tasks.json的taskName相對應 } ] }
tasks.json代碼:
該文件reveal可根據自己喜好修改,-std根據自己的情況修改。如果不想要額外警告,把-Wall那一條刪去。
如果使用Clang編譯C語言,把command的值改成clang。
如果使用MinGW,編譯C用gcc,編譯c++用g++,並把-target和-fcolor那兩條刪去。

// https://code.visualstudio.com/docs/editor/tasks { "version": "2.0.0", "tasks": [ { "taskName": "Compile", // 任務名稱,與launch.json的preLaunchTask相對應 "command": "clang++", // 如果用MinGW,編譯C用gcc,編譯c++用g++ "args": [ "${file}", "-o", // 指定輸出文件名,不加該參數則默認輸出a.exe "${fileDirname}/${fileBasenameNoExtension}.exe", "-g", // 生成和調試有關的信息 "-Og", "-Wall", // 開啟額外警告 "-static-libgcc", // 靜態鏈接 "-fcolor-diagnostics", "--target=x86_64-w64-mingw", // 默認target為msvc,不加這一條就會找不到頭文件 "-std=c++1z" // c++1z即c++17,C語言最新標准為c11,或根據自己的需要進行修改 ], // 編譯命令參數 "type": "shell", "group": { "kind": "build", "isDefault": true // 設為false可做到一個tasks.json配置多個編譯指令,需要自己修改本文件,我這里不多提 }, "presentation": { "echo": true, "reveal": "silent", // 設置是否在“終端”中顯示編譯信息,可以為always,silent,never。一些錯誤提示也在這里,但是因為有靜態檢測,我就設為silent了。 "focus": false, "panel": "shared" // 不同的文件的編譯信息共享一個終端面板 }, "problemMatcher": { "owner": "cpp", "fileLocation": [ "relative", "/" ], "pattern": { "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", // 正則表達式,用於描述在“問題”欄中顯示的信息。 "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } // 1.11.0的更新日志里說可以直接寫"problemMatcher": "$gcc",但是我試了一下不行。 } ] }
settings.json代碼:
如果你沒有合並Clang和MinGW,則該文件中頭文件的路徑必需修改成MinGW的路徑,否則Lint無效。版本號(這里是7和7.1.0)如果不同,也要修改。輸gcc -v可以看到)
Windows下的路徑為反斜杠,原本應使用兩個反斜杠來轉義,但直接用斜杠在VS Code中也接受

// 將設置放入此文件中以覆蓋默認值和用戶設置。 { "files.defaultLanguage": "c", // ctrl+N新建文件后默認的語言 "c-cpp-flylint.cppcheck.enable": false, "c-cpp-flylint.flexelint.enable": false, "c-cpp-flylint.run": "onType", // 此選項貌似不起作用 "c-cpp-flylint.clang.includePaths": [ "${workspaceRoot}", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/x86_64-w64-mingw32", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/backward", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include", "C:/llvm/include", "C:/llvm/x86_64-w64-mingw32/include", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include-fixed" ], "c-cpp-flylint.clang.defines": [ "_DEBUG", "UNICODE", "__GNUC__=7", "__cdecl=__attribute__((__cdecl__))" ], "c-cpp-flylint.standard": [ "c11", // 如果你想要使用c89,就自己改 "c++1z" // c++1z即c++17 ], "code-runner.runInTerminal": true, // 設置成false會在“輸出”中輸出,無法交互 "code-runner.executorMap": { "c": "cd $dir && clang $fileName -o $fileNameWithoutExt.exe -Wall -g -Og -static-libgcc -fcolor-diagnostics --target=x86_64-w64-mingw -std=c11 && $dir$fileNameWithoutExt", "cpp": "cd $dir && clang++ $fileName -o $fileNameWithoutExt.exe -Wall -g -Og -static-libgcc -fcolor-diagnostics --target=x86_64-w64-mingw -std=c++1z && $dir$fileNameWithoutExt" }, "code-runner.saveFileBeforeRun": true, "C_Cpp.clang_format_sortIncludes": true, "C_Cpp.errorSquiggles": "Disabled" }
c_cpp_properties.json代碼:
如果你沒有合並Clang和MinGW,則該文件中頭文件的路徑必需修改成MinGW的路徑,否則IntelliSense無效。版本號如果不同,也要修改。

{ "configurations": [ { "name": "Win32", "intelliSenseMode": "clang-x64", "includePath": [ "${workspaceRoot}", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/x86_64-w64-mingw32", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/backward", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include", "C:/llvm/include", "C:/llvm/x86_64-w64-mingw32/include", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include-fixed" ], "defines": [ "_DEBUG", "UNICODE", "__GNUC__=7", "__cdecl=__attribute__((__cdecl__))" ], "browse": { "path": [ "C:/llvm/x86_64-w64-mingw32/include", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include", "C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include-fixed", "C:/llvm/include/*", "${workspaceRoot}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } } ], "version": 2 }
然后就可以在工作區進行編寫代碼了。
四、其他
關於.exe,這樣編寫下來肯定會有很多.exe文件,會占空間,雖然可能占不了多少空間,但更重要的是會和代碼夾雜在一起,非常不方便查找代碼,我提供下面兩個方法快速刪除.exe文件
第一種方法是把生成的文件的目錄指定到一個特定的目錄,里面都放的是exe。修改一下json文件不難做到。
第二種方法是在cmd下輸一條刪除該目錄及子目錄下所有exe的命令:del /q /s *.exe,
不過小心不要把路徑寫錯了
第三種方法,到工作區的目錄下搜索*.exe就都出來了。