# 在 Visual Studio Code (VSC) 中寫 C/C++ 程式
## 目的
- VSC 是目前許多程式開發者使用的工具,具有非常好的功能,以及很多擴充套件可以使用,適合用來開發各種程式語言或文字編輯。它提供整合的開發環境,包括程式碼自動補全、程式碼說明與除錯等各種功能,可以提高開發效率。
- 在 VSC 中使用 GitHub Copilot,可以透過生成式 AI,根據上下文自動生成程式碼,減少重複的編碼工作,讓使用者可以更專注於解決問題的邏輯,並加快程式學習與開發的速度。
- 在 VSC 中直接編輯 Markdown 文章,可以即時查看文章的渲染效果,同時也支持 LaTeX 數學公式的編寫,非常適合用來撰寫技術文檔或學習筆記。
## 環境建立
1. VSC 下載及安裝
1. 從 VSC 官網 https://code.visualstudio.com 下載及安裝 VSC。
2. 在 VSC 中安裝以下套件:
- C/C++
- Markdown All in One
- Paste image
3. 打開 VSC,在 File 選單中,選擇 Add Folder to Workspace...,選擇或建立一個新的目錄,做為我們的工作目錄。
2. 編輯 Markdown 文章
1. 新增一個 report.md 檔案,用來撰寫學習記錄。
2. 使用簡單的 Markdown 語法撰寫文稿。
3. 圖形的處理,可用 `Win+Shift+S` 熱鍵截圖,用 `CTRL+ALT+V` 熱鍵貼圖 (Paste image 套件提供的功能),貼上之後,會自動產生圖檔及連結。
3. 建置 C/C++ 執行環境
1. C/C++ 程式必須先編譯成執行檔才能執行,因此需要有 C 的編譯器。
2. 因為我們之前使用 Code::Blocks 的時候已經安裝過編譯器,因此我們打算使用已安裝的編譯器。如果想要安裝其他的編譯器,可以參考以下連結: https://code.visualstudio.com/docs/cpp/introvideos-cpp
3. VSC 在編譯及執行程式時,必須知道編譯器的相關設定。這些設定會儲存在 VSC 工作目錄中的 .vscode 子目錄的 tasks.json 檔案。
4. VSC 可以偵測到一些常用的編譯器,但無法偵測到 Code::Blocks 所夾帶的 MinGW 版本,但只要我們把 MinGW 執行檔的位置加到 PATH 環境變數,VSC 也可以找得到我們的編譯器,並自動產生 tasks.json 檔案。
5. 打開 Windows 的設定程式,直接尋找「變數」,選擇「編輯您的帳戶的環境變數」。接下來在使用者變數中選擇「Path」,然後按編輯。在跳出的視窗中選擇新增,然後按瀏覽,尋找 MinGW 的位置 (預設值可能是在 "Program Files\CodeBlocks\MinGW\bin" 的位置),找到之後按確定。
6. 設定好 Path 變數之後,我們可以開一個 cmd 視窗,然後在裡面打指令 `gcc --version`,如果看到有版本的訊息,那就表示 Path 變數的設定正確。
7. 接著我們可以建立一個簡單的 C 程式檔案來進行測試。建立一個 hello.c 檔案,裡面隨便寫一個簡單的 C 程式。
8. 接下來我們要建立編譯器的相關設定。由於系統可以偵測到我們的編譯器,所以最簡單的方式,就是直接選擇上方右邊的執行按鈕 (三角形),按一下下拉選單,會看到有 `Run C/C++ File` 和 `Debug C/C++ File`,選擇 `Run C/C++ File` 執行程式。正常情況,VSC 上方應該會跳出選項,讓我們選擇想要使用的編譯器,這時直接選擇我們所使用的 gcc,應該就會正常編譯並執行程式。過程中,下方會跳出幾個視窗,點選 `Terminal` 視窗,應該就會看到執行的結果。
9. 上述步驟完成後,我們也可以打開左邊檔案的面版,會發現 VSC 自動幫我們新增了一個 .vscode 的子目錄,其中會有一個 tasks.json 的檔案,內容大致如下 (設定可能跟系統有關,所以你看到的也許會有一點點差異):
```json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: Code::Blocks mingw gcc.exe",
"command": "c:\\Program Files\\CodeBlocks\\MinGW\\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."
}
],
"version": "2.0.0"
}
```
10. 上述檔案中,各參數的意義可參考以下的說明:https://code.visualstudio.com/docs/cpp/config-mingw
11. 另外,我們也可以先設定預設的編譯器,再來編譯和執行程式。要設定預設的編譯器,可以按 `Ctrl+Shift+P` 開啟 Command Palette,在搜尋框中打 welcome,選擇 `Welcome: Open Walkthrough...`,然後選擇 `Get Started with C++ Development`,接下來在跳出的視窗中選擇 `Set up your C++ Environment` 裡面的 `Select my Default Compiler`,然後選擇我們使用的 gcc,這樣也會建立 tasks.json 檔案。
12. 其實我們也可以自己建立 tasks.json 檔案,只要設定是正確的,基本上編譯和除錯應該都沒有問題。
13. 針對程式的除錯,也可以設定更多的參數,包括使用的除錯程式、命令列參數等。VSC 會將除錯的相關設定儲存在 .vscode 子目錄的 launch.json 檔案,其內容大致如下 (可能會因系統不同而有些許差異):
```json
{
"configurations": [
{
"name": "C/C++: gcc.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:\\Program Files\\CodeBlocks\\MinGW\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: gcc.exe build active file"
}
],
"version": "2.0.0"
}
```
這邊比較重要的是 `miDebuggerPath` 的值,這個值是 gdb.exe 的程式位置,應該是放在和 gcc.exe 相同的目錄中。
14. 用滑鼠在程式碼行號左邊點擊滑鼠,就會設定中斷點。接著用右上角執行的 ICON,下拉後選擇 Debug C/C++ File,看是否進入除錯模式。
## GitHub Copilot
想要免費使用 GitHub Copilot 的同學:
1. 先至 https://education.github.com/discount_requests/application
申請學生專案的 GitHub 帳號。
2. 在 VSC 中安裝 GitHub Copilot 套件。