---
# System prepended metadata

title: VS Code C/C++環境建置教學(for Windows)
tags: [HackMD教學筆記]

---

# VS Code C/C++環境建置教學(for Windows)

## Step 1 : 下載[VS code](https://code.visualstudio.com/download)

---

## Step 2 : 進入VS Code >> Extension，並安裝C/C++共三個擴充檔案(如下圖)

![C/C++](https://i.imgur.com/kTVuyaJ.png)

---

## Step 3 : 下載[MSYS2](https://www.msys2.org/)

==安裝路徑非常建議用預設路徑就好(預設為C槽)(這樣下面的步驟才更不容易出錯!!)==

### Q : MSYS2有什麼功用?
:::success
透過MSYS2我們可以獲取最新版本的 Mingw-w64 ，它提供了 GCC、Mingw-w64 和其他有用的 C++ 工具和庫的最新本地構建。您可以從 MSYS2 頁面下載最新的安裝程序。
:::

---

## Step 4 : 開啟你的MSYS2終端

輸入指令 : `pacman -S --needed base-devel mingw-w64-x86_64-toolchain`
(這串指令是**安裝Mingw-w64的工具鏈**)

==(下圖為輸入指令後並安裝完Mingw-w64的樣子)==

![MSYS2下載完圖檔](https://i.imgur.com/3YJ7LvG.png)

### <注意>檢查你的Mingw-w64是否成功安裝

==打開你的命令提示字元並輸入 :==

:::success
`gcc --version`
`g++ --version`
`gdb --version`
:::

==如果上面三個指令系統都有成功回應**則代表成功安裝**，但若某一項指令(或以上)Error則代表你可能要重回上面的步驟看哪一部分漏掉了沒安裝好==

---

## Step 5 :　將你的mingw-w64添加到環境變數中

### 1. 進入Windows的設定頁面

### 2. 在設定的搜索欄中搜尋 : 環境變數(量)

==(進去後應該會像下圖一樣)==

![環境變數](https://i.imgur.com/L4KwLaV.png)

### 3. 點擊右下角的環境變數

### 4. 選擇PATH，並點擊編輯

==(如下圖)==

![PATH](https://i.imgur.com/gYQebzM.png)

### 5. 右上角點擊新增，輸入自己的mingw64路徑(在MSYS2資料夾裡面)

如果前面你的MSYS2路徑並未手動改變(而是預設路徑)，那麼新增的路徑為 : `C:\msys64\mingw64\bin`

---

## Step 6 : 建立VS Code的工作區

### 1. 首先進去VS Code，點選左上角的File，並選擇Open Folder(如下圖)

==記得在選擇前要先創立好想要做為工作區的資料夾==

![Open Folder](https://i.imgur.com/eUZ5vvU.png)

==以我自己來舉例，我將C這個資料夾選擇為我的工作區(如下圖)==

![C file](https://i.imgur.com/SMNPdIs.png)

### 2. 接著在你選擇的資料夾中再建立一個.vscode的資料夾(如下圖)

==先暫時忽略.vscode下面的檔案==

![.vscode](https://i.imgur.com/tkD0BVS.png)

---

## Step 7 : 在.vscode資料夾裡新增數個.json檔,來建立工作區的環境

### 1. 新增`c_cpp_properties.json`, `launch.json`, `tasks.json`, `settings.json`共4個.json檔案

==新增完後會像下圖一樣==

![.json檔](https://i.imgur.com/CXu8bNf.png)

![VS code圖](https://i.imgur.com/jMQeZje.png)

### 2. 寫入環境配置(這裡直接將我的程式碼複製貼上對應的json檔即可)

==前提為上面的步驟都和我做得一樣，**特別是安裝路徑**==

**c_cpp_properties.json(編譯器路徑和 IntelliSense 設置)**

```=json
{
    "configurations": [
      {
        "name": "GCC",
        "includePath": ["${workspaceFolder}/**"],
        "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
        "windowsSdkVersion": "10.0.18362.0",
        "compilerPath": "C:/msys64/mingw64/bin/g++.exe",
        "cStandard": "c17",
        "cppStandard": "c++17",
        "intelliSenseMode": "windows-gcc-x64"
      }
    ],
    "version": 4
}
```

**launch.json(Debugger設置)**

```=json
{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "C/C++: g++.exe build and debug active file",
        "type": "cppdbg",
        "request": "launch",
        "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${fileDirname}",
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
        "setupCommands": [
          {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
          }
        ],
        "preLaunchTask": "C/C++: g++.exe build active file"
      }
    ]
}
```

**tasks.json(構建說明)**

```=json
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe build active file",
            "command": "C:\\msys64\\mingw64\\bin\\gcc.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build active file",
            "command": "C:/msys64/mingw64/bin/g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "C:/msys64/mingw64/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}
```

**settings.json(可寫可不寫)**

==這串程式碼的功能是系統自動幫忙刪除.exe檔，不然每次執行完一次程式都要手動刪除exe檔才可以執行下一次程式==

```=json
{
    "files.exclude": {
        "**/*.exe":true,
    },
}
```

---

## Step 8 : 環境建置完成，來寫我們的第一個程式吧 !

### 1. 選擇New file

![New file](https://i.imgur.com/Nu0o33U.png)

![01.c](https://i.imgur.com/BIclGBl.png)

==這裡要記得加後綴.c(如果是C++則是.cpp)==

==並且盡量別建立在.vscode裡面，而是建立在工作區最外層(在這裡是C資料夾中)==

### 2. 執行 Hello World

```c=
#include <stdio.h>

int main()
{
    printf("Hello World !");
}
```
![Hello World](https://i.imgur.com/lH6t9CN.png)

==點擊Debug C/C++ File(中斷點設在line 5)==

![執行](https://i.imgur.com/mG22VyC.png)

==假如你的程式執行和下圖一樣，則代表你成功了!==

![除錯](https://i.imgur.com/W0akMiJ.png)


==點擊 Run C/C++ File==

==因為上面我環境建置的原因，所以執行程式後會直接在VS code的終端機(TERMINAL)執行(如下圖)==

![成功](https://i.imgur.com/Cr9Qz7x.png)

==若是C++的工作區也是同理，可以直接把.vscode資料夾照搬過去==

---

## 額外好用功能

### 程式碼自動儲存

原本的程式碼儲存都需要使用CTRL+S，但你也可以點選File >> Auto Save，系統就會自動幫你儲存程式碼

### 如果你不想使用VS code內建的終端機，而是想使用CMD/Power Shell等等小黑窗來執行程式 : 

將`launch.json`中的`"externalConsole"`改為true

但這樣改完後會產生一個問題，就是小黑窗**會一閃而逝**

==**原因為小黑窗輸出資料後就會直接關閉**==

#### 1. C的解決辦法

==這裡一樣用Hello World程式碼來舉例==

```c=
#include <stdio.h>
#include <windows.h>

int main()
{
    printf("Hello World !");
    system("pause");
}
```
:::info
新增庫函數<windows.h>以及system("pause");

強制小黑窗輸出後暫停，而不結束
:::

#### 2. C++的解決辦法

==直接在程式碼最後加上system("pause");即可==

---

## 參考資料

### [VS Code 官網教學](https://code.visualstudio.com/docs/cpp/config-mingw)

###### tags: `HackMD教學筆記`























