# 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教學筆記`