如何在Win11環境下使用Vscode執行C/C++
===
作者: [台中教育大學 白帽社](https://hackmd.io/@ntcuhack/index) -sunfrancis12
## 前言
### 撰寫日期
*此篇教學撰寫於2023/9/5*
### 歷史紀錄
*此篇教學更新於2023/10/3*
### 試用版本
* WIN 10 & WIN 11
Win10和Win11的安裝方法和步驟都基本相同,只是兩者的系統設定介面不太一樣,而且**設定的名稱以及完成設定的方法都是完全一樣的**,所以本教學也同樣適用於Win10版本
### 給讀者的話
想要編譯 **C/C++** 語言需要C的編譯器(compiler),但是Vscode本身的性質比較像是一種文字編輯器,可以當作是Windows文字編輯器的高階版本,其本身是不包含[GCC](https://zh.wikipedia.org/zh-tw/GCC)(C語言編譯器)的,因此我會建議初學者如果不太會安裝的話或者嫌麻煩的可以從Dev C++或Code Blocks開始寫C
~~雖然他們的介面是真的不怎麼好看啦~~
## 安裝編譯器
我們首先要安裝C的編譯器(compiler),也就是GCC,我這裡要安裝的是[Mingw](https://zh.wikipedia.org/zh-tw/MinGW)
### 前往官網下載Mingw
> 網址: https://www.mingw-w64.org/downloads
我們這裡選擇的是WinLibs.com,安裝的流程也相對簡單

進到Winlibs官網,點選想要的版本下載(我是下載最新的版本),要注意下載的檔案格式為`.7z`,需要事先下載[7zip](https://www.7-zip.org/)來解壓縮
> 官網: https://winlibs.com/

解壓縮完後,會出現一個`Mingw64`的資料夾,我會建議把資料夾移至`C:\`目錄

點進去資料夾,點開`bin`資料夾,將以下檔案路徑複製起來,以圖片為例:`C:\mingw64\bin`

## 設定環境變數
我們需要設定[環境變數](https://learn.microsoft.com/zh-tw/powershell/module/microsoft.powershell.core/about/about_environment_variables?view=powershell-7.3)(Environment Variable),這樣才能在系統中任意的目錄中呼叫gcc編譯器
### 方法一
可以直接在功能欄搜尋`編輯系統環境變數` 開啟

### 方法二
打開設定,點選`系統資訊`

點選`進階系統設定`

點選`環境變數`

### 環境變數
選取"系統變數"的`Path`,按下`編輯`按鈕

按下`新增`,將剛剛複製的檔案路徑貼上於此,(C:\mingw64\bin),完成後按下`確定`。

## 測試編譯器
在工作欄搜尋`cmd`(命令提示字元),點擊打開

開啟後,輸入以下指令,測試gcc編譯器呼叫是否成功
```
gcc --version
```
*備註:我有安裝一個應用程式叫[Windows terminal](https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701?hl=zh-tw&gl=tw&icid=CatNavSoftwareWindowsApps),所以cmd的樣子會跟系統預設的不太一樣*
成功結果如下,可以看到版本資訊

## 安裝VScode以及所需套件
我們可以開始來安裝Vscode了,到官網去下載Vscode
> 官網: https://code.visualstudio.com

下載完成後,點擊左邊那列的`Extensions`圖案

### C/C++
搜尋C/C++,下載`C/C++`和`C/C++ Extension Pack`。


### Code Runner
:::info
**備註:**
Code Runner其實不是必要的套件,他只是一個自動幫你輸入編譯指令的套件而已,有他就不用每次都要輸入編譯的指令,十分方便,建議大家安裝
:::
搜尋code runner,下載`code runner`

接下來我們還需要調整`code runner`設定,點開小齒輪,從下拉選單選取`Extension setting`
進到選單後,往下滑找到`Run in Termainal`,將該選項打勾

## VScode編譯器設定
按`Crtl` + `Shifp` + `p` 快捷鍵打開搜尋欄搜尋**C/C++:Edit Configurations (UI)**

點進去後,可以看到一個設定介面如下

我們找到`編譯器路徑`欄位,選擇`gcc.exe`

:::info
**備註:**
路逕每個人可能會有所不同,就是你當初下載Mingw所放的檔案位置
:::
找到`IntelliSense 模式`欄位,選擇`windows-gcc-x64`

:::info
**備註:**
x64是指電腦為64位元,如果你的電腦是32位元的話請選擇x86,但是現在真的還有32位元的電腦嗎??
:::
## 測試程式撰寫與執行
我寫了一個hello world的C++程式,程式碼如下
```C++=
#include<iostream>
using namespace std;
int main(){
cout<<"Hello world";
}
```
完成後,可以按右上角的三角形圖案,執行程式

在下面的`Terminal`終端機就可以看到程式運行的結果囉

## 補充
當然除了上述的方法之外,我們也可以在`Terminal`裡面輸入指令來生成一個執行檔,並使用指令執行
### For C
我撰寫的程式如下:
```c=
#include<stdio.h>
int main(){
printf("Hello world");
}
```
編譯.c檔案的指令如下:
```
gcc {檔案路徑} -o {執行檔名稱}
```
以下面指令為例,我要編譯一個名為"hello_world.c"的檔案,並且編譯完成後生成的執行檔(.exe)會叫做"hello_world_c.exe"
如果沒有加上後面`-o ....`參數的部分,系統會默認生成一個`a.exe`執行檔
```
gcc hello_world.c -o hello_world_c
```
結果如下:

我們在終端機輸(預設為Powershell)入執行檔名稱,就可以執行該執行檔
```
./hello_world_c.exe
```

### For C++
我撰寫的程式如下:
```c++=
#include<iostream>
using namespace std;
int main(){
cout<<"Hello world";
}
```
編譯.cpp檔案的指令如下:
```
g++ {檔案路徑} -o {執行檔名稱}
```
以下面指令為例,我要編譯一個名為"hello_world.cpp"的檔案,並且編譯完成後生成的執行檔(.exe)會叫做"hello_world_cpp.exe"
如果沒有加上後面`-o ....`參數的部分,系統會默認生成一個`a.exe`執行檔
```
g++ hello_world.cpp -o hello_world_cpp
```
結果如下:

我們在終端機輸(預設為Powershell)入執行檔名稱,就可以執行該執行檔
```
./hello_world_cpp.exe
```

### 更多關於GCC 編譯的介紹可以看這篇
> https://blog.gtwang.org/programming/gcc-comipler-basic-tutorial-examples/