# 在 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 檔案。VSC 可以偵測一些常用的編譯器,但無法偵測到 Code::Blocks 所夾帶的 MinGW 版本 (直接安裝的 MinGW 版本可以偵測到)。我們可以直接拿一個現成的設定來修改,建立 .vscode 目錄,並將以下內容存成 .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": "c:\\Program Files\\CodeBlocks\\MinGW\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
```
4. 上述檔案中,各參數的意義可參考以下的說明:https://code.visualstudio.com/docs/cpp/config-mingw
這邊最重要的參數應該是 `command`,也就是編譯器的位置。我們可以先試著找到 Code::Blocks 中 MinGW 的 gcc.exe 的路徑,然後把 `command` 的值改成正確的路徑即可。另外,options 裡面的 cwd 的值要放 gcc.exe 所在的路徑。
5. 建立一個新的 C 程式檔案。選擇右上角執行的 ICON (三角形,左下有一隻蟲的圖樣),下拉後選擇 Run C/C++ File,應該會在下方開啟終端機編譯及執行程式。
6. 執行完成後,下方選擇 Terminal 頁籤,如果設定都正確的話,應該就會看到執行結果。
7. 我們也可以進行程式的除錯。除錯時,VSC 會將除錯的相關設定儲存在 .vscode 子目錄的 launch.json 檔案。我們可以修改以下的內容,並存到 .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 相同的目錄中。
8. 用滑鼠在程式碼行號左邊點擊滑鼠,就會設定中斷點。接著用右上角執行的 ICON,下拉後選擇 Debug C/C++ File,看是否進入除錯模式。
## GitHub Copilot
想要免費使用 GitHub Copilot 的同學:
1. 先至
https://education.github.com/discount_requests/application
申請學生專案的 GitHub 帳號。
2. 在 VSC 中安裝 GitHub Copilot 套件。
`CTRL+SHIFT+P` Command Palette, Welcome