---
# System prepended metadata

title: (新手向)使用VSCode撰寫、編譯並Debug(偵錯)C/C++程式碼 (Windows)
tags: [Clang, C, Clangd, VSCode, "\_C++"]

---

# (新手向)使用VSCode撰寫、編譯並Debug(偵錯)C/C++程式碼 (Windows)
###### *注意時效性(本文撰寫於 2025/4)*
這篇文章是專門for C語言入門新手，或者是在被學校的程式語言用 Dev-C++ 荼毒過後的學生，想轉戰使用美觀、方便的VSCode寫C語言所做的教學。
當然我知道，有些人可能有一些奇怪的開發環境癖好(例如我)，所以環境先講清楚，不喜歡直接上一頁避免浪費時間。
本文會使用Msys2安裝Clang Compiler，並且使用LLDB進行Debug。
另外，設定完成後，只會編譯單一檔案，不適用多檔編譯。

請注意，編譯環境for C (最後一節會教學C/C++編譯)，作業系統使用Windows 10，理論上來說Windows 11應該不會有差別。

# 教學開始
## 1. 安裝Msys2
首先請至[MSYS2](https://www.msys2.org/)官網下載安裝檔
![](https://hackmd.io/_uploads/ByHXVEBRkl.png)
> 紅框框起來的地方點下去就會直接下載  

安裝過程我只提一點：安裝位置請自行抉擇，通常是如下圖預設C:\msys64 但是如果各位有需求需要更改安裝位置可隨意更改(最常見的理由 C槽不夠大，根據教學設定完後會占用2 GB)，惟後面教學遇到C:\msys64的部分請修改為各位更改後的安裝路徑。
![](https://hackmd.io/_uploads/HJ_yrVSCke.png)
> 有需要自行將C:\msys64改掉，請注意後面步驟有遇到也要一起改

之後就是下一步點到底，等待安裝完畢。
安裝完畢之後會直接跳出一個終端機，先關閉他。
之後於左下角搜尋Msys2，打開Msys2的終端機
![image](https://hackmd.io/_uploads/SJMbr4BCkg.png)
> 於搜尋欄內搜尋msys2

打開後輸入 pacman -Syu
```bash 
pacman -Syu
```
![image](https://hackmd.io/_uploads/BySVBESAyl.png)
> 這行指令的作用是更新Msys2及套件

跑一下子之後會如下圖一樣卡住，直接壓Enter或者輸入y之後壓Enter都可以。
![image](https://hackmd.io/_uploads/r1OSH4HCkg.png)
> 個人是直接壓Enter，我懶

之後再跑一陣子又會卡住，直接壓Enter，應該會關閉終端機。
![image](https://hackmd.io/_uploads/SyywBNB0Je.png)
> 最後一行的意思就是說完成更新需要關閉終端機

之後重新開啟終端機，輸入 pacman -S mingw-w64-clang-x86_64-clang
```bash
pacman -S mingw-w64-clang-x86_64-clang
```
![image](https://hackmd.io/_uploads/S1gtB4rRyx.png)
> 安裝Clang Compiler

會詢問你要不要安裝，一樣直接壓Enter
![image](https://hackmd.io/_uploads/rk3tB4B0Je.png)
> 安裝Clang Compiler時會安裝的依賴套件列表以及Clang本身

那這段安裝時間需要一段時間，取決於網路給不給面子，可以先去泡杯咖啡來喝或者滑個手機。
跑完之後就可以直接把Msys2終端機關掉了。
## 2. 更改PATH環境變數
按下Win+R輸入"rundll32.exe" sysdm.cpl,EditEnvironmentVariables，開啟環境變數設定。如果沒有出現，請將每個視窗一個一個縮小，應該是被其他視窗擋住了。
```bash
"rundll32.exe" sysdm.cpl,EditEnvironmentVariables
```
![image](https://hackmd.io/_uploads/SJSGLVB01l.png)
> 右鍵點擊Windows按鈕選"執行"也可以叫出來

選擇Path，按編輯。
![image](https://hackmd.io/_uploads/By1rIVH0Jx.png)
> 上面跟下面的Path都可以

選擇瀏覽，之後選到C:\msys64\clang64\bin，點確定
![image](https://hackmd.io/_uploads/r1AS8EHAye.png)
> 前面有改路徑的同學請記得自己換路徑!

之後就是確定三連即可。如果你的VSCode開著，請將VSCode完全關閉後重開，VSCode才會套用新的環境變數。

*上面這邊是設定路徑的環境變數，方便之後VSCode執行指令。*

> 上面這段主要是在安裝Compiler，VSCode本身只是編輯器，並不具備編譯C語言程式的能力；而我使用Msys2安裝的原因是：方便。大部分的人可能會覺得在那邊打指令打來打去還沒我直接google的快哪裡方便? 只能說以後如果各位要裝一堆雜七雜八且都是for 類Unix系統使用的套件時就會明白Msys2的好了。還有，一鍵更新是真的爽。

## 3. 安裝 VSCode
我希望這個章節可以不用教，畢竟VSCode就是左鍵點到底，但是安裝時有一些小設定我覺得很重要的因此稍微提一下，如果各位已經裝完了就可以跳過了。

一樣先到[VSCode](https://medium.com/r/?url=https%3A%2F%2Fcode.visualstudio.com%2Fdownload)官網下載安裝
![image](https://hackmd.io/_uploads/rye2UNB01x.png)
> 一樣紅框框起來的地方，點ㄊ下載

安裝到第三頁的時候注意一下，我建議這裡的選項全勾起來。
![image](https://hackmd.io/_uploads/rymaLNB0ye.png)
## 4. 安裝VSCode的延伸模組
安裝完成之後打開VSCode，我們需要安裝一些延伸模組來幫助我們使用VSCode上使用的更順利。

首先點選左邊的延伸模組(Extension)
![image](https://hackmd.io/_uploads/BJYR8EH01x.png)
> 一樣點紅框框

在上面的Search欄位打Chinese，看到那個中文(繁體)的Install按鈕，點他。
![image](https://hackmd.io/_uploads/rJ91wNBR1x.png)
> 當然你要裝簡體的或者直接不裝用英文我也不反對

好了之後右下角會問你要不要切換語言，點擊按鈕，VSCode應該會自動關閉後重啟，並且語言變為中文。
![image](https://hackmd.io/_uploads/H11-vNSRkg.png)
> 點擊Change Language and Restart

重新啟動完成之後，點擊左邊的延伸模組，接下來安裝C語言的延伸模組，讓VSCode支持C語言的語法。
![image](https://hackmd.io/_uploads/ry7GwEHRkl.png)
> 搜尋C，對C/C++延伸模組點擊安裝

再次搜尋，這次搜尋CodeLLDB，安裝Debugger。
![image](https://hackmd.io/_uploads/S1eQwErR1g.png)
這個Debugger安裝需要一點時間(取決於網路速度)。    

到這邊VSCode延伸模組安裝就差不多完成了，接下來便是教學如何用VSCode寫C語言以及編譯、Debug。
## 5. 準備Workspace
要使用VSCode寫程式，我這裡強烈建議，請把每個語言的資料夾都分開，並且一定要開啟一個資料夾作為Workspace，方便管理環境。

首先在桌面(或者你喜歡的任何地方)創建一個資料夾，這個資料夾專門放置C語言檔案。範例如下，我在桌面創建一個資料夾"C"。名稱注意一下，請盡量不要是中文且不要有空白(空白可用底線(_)取代)。
![image](https://hackmd.io/_uploads/S1wHwNr0kx.png)
> 位置與名字都隨意，但請盡量不要是中文且不要有空白。

點開資料夾之後，在空白處點右鍵，會看到一個選項"以Code開啟"，點他。
![image](https://hackmd.io/_uploads/SyUDv4rRye.png)
> 還記得我們安裝VSCode時勾選的選項嗎? 就是在這裡派上用場了，非常好用!

打開VSCode之後我們就會在這個C資料夾裡了。
![image](https://hackmd.io/_uploads/r1lKwESAkl.png)
> 檔案總管下面的C 就是範例中的C資料夾了

滑鼠移到檔案總管上，可看到資料夾上有浮現選項，左邊為新增檔案，右邊為新增資料夾。
![image](https://hackmd.io/_uploads/SynFvVrRkl.png)
點選新增檔案，並且命名檔案。任意名稱，盡量不要是中文且不要有空白，但是後綴必須是.c
![image](https://hackmd.io/_uploads/ryu9wVBRyx.png)
> 這裡命名為lkk1.c，記得一定要.c結尾，VSCode才會識別為C語言檔案

之後我們就可以開始編寫程式了。以下示範為一個簡單的Helloworld程式。
![image](https://hackmd.io/_uploads/HJLsD4rCye.png)
> 各位自己打一遍，就會知道VSCode的方便與強大之處!

好，可是這個時候要怎麼運行? VSCode這個時候還不知道如何編譯與運行你的檔案，因此我們需要寫設定來讓VSCode自動地幫我們編譯與運行。

## 6. 設定VSCode的編譯與運行
接下來我們要設定VSCode，幫我們運行指令。

首先按下F1，輸入con，找到 工作: 設定工作，來設定編譯工作。
![image](https://hackmd.io/_uploads/B1bav4BCJg.png)
### A. 如果你前面的Path環境變數有設定正確，沒有意外的話會跳出clang的編譯工作，直接點選他。

*(沒跳出請跳到[B.](#B-如果你的並沒有跳出clang編譯工作選項，選擇-從範本建立tasksjson檔案，) )*
![image](https://hackmd.io/_uploads/BJQJd4S0kg.png)
![image](https://hackmd.io/_uploads/Hy2yd4HCJl.png)
> 如果要知道tasks.json的內容意義，請自行參閱VSCode官方文檔。

這邊請將label的內容改為build，方便之後的設定。
![image](https://hackmd.io/_uploads/B1hxuNS0ye.png)
> 反白處


### B. 如果你的並沒有跳出clang編譯工作選項，選擇 從範本建立tasks.json檔案，
![image](https://hackmd.io/_uploads/r1H7uVHRJe.png)
之後選擇Others。
![image](https://hackmd.io/_uploads/ry37dNB0ke.png)
貼上以下內容於"tasks":[ ] 的[ ]內即可。
```json
{
    "label": "build",
    "type": "shell",
    "command": "clang",
    "args": [
        "-g",
        "${file}",
        "-o",
        "${workspaceFolder}/${fileBasenameNoExtension}.exe"
    ],
}
```
結果如下圖。
![image](https://hackmd.io/_uploads/ByeIdNBA1e.png)
到這邊，編譯工作已經完成，但VSCode到這邊也只會幫你編譯出可執行檔，

此時VSCode只能運行，還不能Debug，因此我們需要再設定Debug設定。
點選左邊的Debug選單，並按下 建立launch.json檔案。
![image](https://hackmd.io/_uploads/ryXw_VH0kg.png)
> 建立Debug設定檔

選擇LLDB。
![image](https://hackmd.io/_uploads/H1WOuVBC1g.png)
> 不要選到上面兩個選項喔!

點下去之後會跳出一個選單，這邊請直接按ESC就好。
![image](https://hackmd.io/_uploads/B16u_Vr0ye.png)
> 如果有跳出這個選單直接按ESC就好

接下來要修改一下這個launch.json檔案。
請將這個<executable file\>換成 {fileBasenameNoExtension}.exe 。

```json
${fileBasenameNoExtension}.exe 
```
![image](https://hackmd.io/_uploads/SyxTdVSR1e.png)
> 修改前，要修改的地方我有幫你反白


![image](https://hackmd.io/_uploads/r1iRONS0kx.png)
> 修改後，如圖上所示。
    
之後還要新增一個選項preLaunchTask。
```json
"preLaunchTask": "build"
```
![image](https://hackmd.io/_uploads/SJaUYVBCyx.png)
或者你直接copy以下的文字到launch.json檔案也可以，只要長得跟上圖一樣就行。
```json
{
    "type": "lldb",
    "request": "launch",
    "name": "Debug",
    "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
    "args": [],
    "cwd": "${workspaceFolder}",
    "preLaunchTask": "build"
}
```
好了到這邊我們就結束VSCode的設定了，可以開始嘗試編譯並Debug C語言檔案了。
## 7. 編譯並運行C語言程式
點選左邊的檔案總管，回到我們的C語言檔案。
![image](https://hackmd.io/_uploads/S1F5FEHRyg.png)
之後直接按下F5，就可以執行了。
![image](https://hackmd.io/_uploads/ByEjtEBRkx.png)
> 等待一段時間後的執行成果

嗯? 阿我們的Hello world!怎麼不見了?
其實是被VSCode給偷偷隱藏起來了! 點選下面的終端機，就可以看到執行結果了。
![image](https://hackmd.io/_uploads/Sy73Y4SR1x.png)
> 到終端機這裡就可以看到我們的Hello World!

*(可選)* 如果不喜歡VSCode內建的終端機，可以在launch.json再新增一個選項，使用外部的終端機(外部的cmd、powershell等)。
```json
"console": "externalTerminal"
```
![image](https://hackmd.io/_uploads/r1r-qNB0ye.png)
好的，到這邊就已經可以開始寫你自己的C語言程式了!
這邊有幾點注意事項提醒各位。
#### A.右上角也有一個選項是 偵錯C/C++檔案 ，我們這邊並沒有設定這邊的參數，因此會無法執行，若要用這邊的選項請自行找網路上的資源來設定。
#### B.按下F5檔案時，當前的視窗開啟的檔案必須要是你要編譯的.c檔!(也就是你畫面上的文字編輯器的內容要是.c檔的內容) 
VSCode會根據你視窗開啟的檔案自動識別要編譯的檔案名字，並根據名字產生執行檔並運行偵錯。

編譯環境建置教學到此結束，下面都是額外教學不必要做。A.是在介紹VSCode Debug介面以及功能，如果各位以前沒有使用過Debug建議看一下，可以讓各位以後Debug的時候更有效率。
# 額外介紹/教學
## A. VSCode Debug功能簡單介紹
我們寫一個包含變數與迴圈的程式，來介紹Debug功能。
![image](https://hackmd.io/_uploads/Sy8V54rC1l.png)
> 範例程式

於行數的左邊，滑鼠滑上去時可以看到紅色的點，這個點稱為"中斷點"，意思是當程式運行到有紅點的那行便會自動暫停。暫停時，VSCode會秀出各個變數的內容!
![image](https://hackmd.io/_uploads/Bk9Sq4HAkl.png)
![image](https://hackmd.io/_uploads/HJCHcNHCJl.png)
> 程式暫停時的樣子

於左邊的介面中，"變數"會顯示出Local(局域)變數與其他的全域和Static變數，而紅框中是我滑鼠移到一個變數上，VSCode會有Hover顯示該變數的內容。
中斷點可以自行增減，在程式執行時與暫停時皆可設置，因此可以設置多個中斷點方便觀察程式運行的過程與結果。

而上面的選單也需要介紹，也是很重要的功能。最左邊的叫做"繼續"，意思就是讓程式再繼續執行，直到遇到下一個中斷點。例如我將中斷點從第8行改到第13行並按下"繼續"，程式就會一直執行直到第13行又再次暫停。
![image](https://hackmd.io/_uploads/S1NvqVrR1x.png)
> 取消第8行的中斷點，並在第13行增設中斷點

![image](https://hackmd.io/_uploads/HJkcc4H01l.png)
> 按下"繼續"後程式停在第13行，可看到此時\*並沒有印出

接下來則是右邊的"不進入函式"、"逐步執行"與"跳離函式"，要解釋這三個的差異需先撰寫一個函式方便講解。我這邊撰寫另外一個範例程式講解。
![image](https://hackmd.io/_uploads/rkcjc4rCke.png)
> 新的範例程式，含有函式，不會函式請查C語言教學，這裡不贅述

我們將中斷點設置在第12行，並按下"逐步執行"，看看會發生什麼事?
![image](https://hackmd.io/_uploads/BJV25VSRJl.png)
> 程式於12行暫停，還未按下"逐步執行"

![image](https://hackmd.io/_uploads/SJ635EH01x.png)
> 按下逐步執行後，可看到程式跑到了函式內部!

逐步執行，顧名思義就是一步一步往下做，包含函數的內部也會一步一步往下做，當你要查看函數內部的運行狀況(例如傳入函數的數值為何、函數內的執行等)，就非常有用!

那我們接下來看"跳離函式"。簡而言之，跳離函式便是讓程式一直執行直到這個函式返回。**請注意，跳離函式的意思並不是直接讓函式在該行直接返回! 而是讓程式一直執行直到函式返回!** 這個在執行一個較大的函式時，若我們要查看的部分只在函式前面，而後面不care的時候，這個時候查看完直接按跳離函式就會非常方便。
![image](https://hackmd.io/_uploads/SyRJi4HAJx.png)
> 我們直接在第4行那邊按跳離函式

注意到上圖幾件事情: 
#### 1. 我並沒有在12行按中斷點(我將第12行的中斷點取消了)，然而在我按下跳離函式後，程式依然是停在第12行。
#### 2. 左邊的Local可看到return value，這邊可以直接讓各位看到函式返回值，相當方便!

最後便是"不進入函式"，顧名思義便是直接跳過函式的內部步驟，
當我想focus在main的運行，而不想管函式細節時就會使用這個功能。**一樣請注意，不進入函式並不是跳過這個函式不執行了! 而是將這一行當成一個敘述，直接執行到下一行。**
![image](https://hackmd.io/_uploads/r1yUjVBRkx.png)
> 於第12行按下中斷點使程式停在12行

![image](https://hackmd.io/_uploads/ByFLo4SAJg.png)
> 程式會直接往下跳下一行。

一樣可以注意到幾件事情: 
#### 1. 直接跳到下一行，並沒有在函式內部暫停。
#### 2. 左邊變數的監看可以看到tmp 的6有稍微反白，當你每運行 1行程式，若變數有更動，則有變動的變數VSCode會幫你反白，方便Debug。

## B. 自動排版
剛開始寫程式語言時，可能對於排版無感，例如下面這種。但是，一個良好的排版對於程式碼閱讀是很重要的! 但是你說我手動排版很麻煩啊? 那怎辦? 其實VSCode可以自動幫你排版!
![image](https://hackmd.io/_uploads/SkiKjNB0Jx.png)
> 這種排版真的會讓人看到非常抓狂

那要如何設定呢? 請按下F1，輸入format，選擇 文件格式化方式...
![image](https://hackmd.io/_uploads/ryncsNSCkl.png)
選擇 設定預設格式器
![image](https://hackmd.io/_uploads/BJXjjVHRJe.png)
> 選擇C/C++則是會直接幫你排版

選擇 C/C++
![image](https://hackmd.io/_uploads/rJl3jES01l.png)
> 按Enter選擇格式器

之後點左下角的齒輪，點設定
![image](https://hackmd.io/_uploads/Sy62j4SRJe.png)
在設定上搜尋format，將 Format On Save 打勾
![image](https://hackmd.io/_uploads/rkvTjEBAJe.png)
之後回到我們的.c檔，按下Ctrl + S 儲存檔案，此時VSCode就會自動幫我們排版排好了!
![image](https://hackmd.io/_uploads/S11RsEBA1x.png)
> 簡單、省時、美觀又方便

## C. 使用Clangd提示
在本篇 4.安裝延伸模組 時，我們使用C/C\++延伸模組內建的提示，來幫助我們提示函式的名稱。然而本人認為C/C\++內建的提示其實挺破爛的，我自己是使用Clangd提示，會更方便一點。
![image](https://hackmd.io/_uploads/ryiz2VS0kx.png)
> 新手最常見的錯誤 : scanf傳參忘記加&，clangd會直接幫你標示出來!

安裝也很簡單，首先一樣左邊延伸模組Clangd，安裝。
![image](https://hackmd.io/_uploads/r1YX3VHAyl.png)
安裝完之後右下角會跳出兩個選項，按 Disable IntelliSense。
**請不要按Install，會出事。**
![image](https://hackmd.io/_uploads/BJONh4B0ke.png)
> 如果不小心點到Install請記得取消

之後則是下載Clangd，Clangd也可以在Msys2上下載到，打開Msys2終端機，輸入pacman -S mingw-w64-clang-x86_64-clang-tools-extra
```bash
pacman -S mingw-w64-clang-x86_64-clang-tools-extra
```
![image](https://hackmd.io/_uploads/H1NU34SRJe.png)
> 用Msys2安裝clangd

之後重開VSCode就可以了。

另外，這個時候自動排版的設定會跑掉，請回到[B. 自動排版](#B-自動排版)重新設定一次，但要選擇Clangd作為格式器。

## D. 根據後綴自動判別C/C++檔案並編譯
我們上面所用的設定是for C語言的，這個時候如果你用.cpp檔案寫一個C\++程式會發現編譯不讓你過，因此要改用C\++的編譯器。
![image](https://hackmd.io/_uploads/rJaP3ESAJe.png)
> C++的Hello World程式，編譯報錯了

請在左邊的延伸模組尋找Command Variable，並安裝
![image](https://hackmd.io/_uploads/HJ3dhESAJx.png)
> 安裝Command Variable延伸模組

之後請找到tasks.json，在檔案總管下的.vscode資料夾內。
![image](https://hackmd.io/_uploads/BkjK2ES0kx.png)
> .vsocde資料夾內含VSCode的設定檔案

請將tasks.json的內容與下圖紅框的內容進行比對，並修改成與圖內一致。
```json
"type": "shell"
```
```json
clang${input:pickExtension}.exe
```
```json
"inputs": [
    {
       "id": "pickExtension",
       "type": "command",
       "command": "extension.commandvariable.file.fileAsKey",
       "args": {
          ".cpp": "++",
          ".c": ""
       }
    }
 ]
```
![image](https://hackmd.io/_uploads/SyOq2ErCJx.png)

如果tasks.json是複製我文章上的內容，請將clang那行修改，並加上inputs那些內容即可。
![image](https://hackmd.io/_uploads/By-x64H0yl.png)
> 如果tasks.json是用複製的，結果如圖

修改好之後回到我們的C++檔案，按F5運行。
![image](https://hackmd.io/_uploads/B1ebTNHR1x.png)
> 修改好之後使用clang++編譯，運行成功

可以發現我們的C++程式可以正常的執行了。

## E. 變更VSCode主題顏色
不習慣黑畫面? 想改成白畫面?
點選左下角設定->主題->色彩佈景主題
![image](https://hackmd.io/_uploads/S1pjESS0Jx.png)
上面就會有很多選項給你選了。
![image](https://hackmd.io/_uploads/HyZJHHBRJg.png)


---

好的，本篇教學就到此結束，本人第一次寫這種教學也是第一次用HackMD，若有問題歡迎留言詢問。