--- title: '在無人之境初次見面的 C 語言與 VSCode' description: '本篇筆記主要帶大家瞭解 IDE 與文字編輯器介紹一款好用的編輯器 VSCode 並用來練習開發 C 語言' tags: Note --- # 在無人之境初次見面的 C 語言與 VSCode - IDE 與編輯器淺談 [TOC] ## IDE - 整合式開發環境 + 整合式開發環境 IDE (Integrated Development Environment) 是一種程式語言開發軟體,從撰寫程式碼到編譯、除錯到建置都包含在內的程式 + IDE 常見的特性: + 語法高亮 + 程式碼自動完成 ![](https://i.imgur.com/wzTzF62.png) + 視覺化界面 ![](https://i.imgur.com/8ogML4c.png) + 一鍵編譯、除錯、執行 + 優點: + 通常 IDE 都是針對某幾個特定語言的開發,當專門使用某個語言時會特別順手 + 在開發大型專案時,IDE 的管理能力也會比較好 + 缺點: + 軟體規模較大,佔用的檔案容量會比較大,開啟程式的讀取時間也會比較久 + 常見 IDE + C & C++ + Code::Blocks + Visual Studio + Java + Eclipse + IntelliJ IDEA + Python + Spyder + PyCharm ## Text Editor - 文字編輯器 + 文字編輯器 Text Editor 通常只提供純文字的編輯功能,包含基本的複製、剪下、貼上、搜尋、取代等功能,而一個文字編輯器的強大通常是來自於第三方插件 + 優點: + 輕量、快速、簡潔 + 缺點: + 在開發大型專案時會顯得較為吃力 + 常見 Editor + Notepad + Windows 內建文字編輯器 + Notepad++ + 兼具讀取速度與美觀的好選擇 + Atom + 免費、開源、跨平台 + Sublime Text + 基本上免費使用,但會一直吵著要你買 + Nano, Emacs, Vim + 真.純文字編輯器 + VSCode + 本日主角 ## VSCode ### 簡介 + Visual Studio Code,俗稱 VSCode,是近幾年由微軟推出的一款文字編輯器,因為其免費、輕量、開源、美觀、跨平台、高擴充性且與社群持續整合的特性而十分受到歡迎,也是筆者最近用來開發程式的主力 + 剛開始學習程式設計的時候,程式碼的複雜性並不高,所以筆者相當推薦用環境單純的 VSCode 來撰寫練習用的程式碼,而透過官方提供的 SSH Remote 與內建的整合式 Terminal,也能用 VSCode 來做網路管理 ### 安裝 + 到 [VSCode 官網](https://code.visualstudio.com/) 下載安裝檔,除了 Windows 以外也有提供 macOS 與 Linux 的版本 + 安裝時只要下一步下一步就可以,其中這步驟建議全部打勾 ![](https://i.imgur.com/Xm7WLkn.png) + 電腦教室已經內建 VSCode 不需要額外安裝 + Debian 系列的可以下載官方的 `.deb` 檔安裝,Redhat 系列則可以下載 `.rpm` + 也有 Snap 的版本提供給其他 Linux 發行版安裝 ### 基本操作 + 如果用不習慣英文版的介面,可以按下 `Ctrl + Shift + X` 切換到插件視窗,搜尋 `Chinese`,找到繁體中文的插件後點右下角的 Install,重開 VSCode 之後就會變成中文了 + 繁體中文的插件全名為「Chinese (Traditional) Language Pack for Visual Studio Code」 + VSCode 可以用一個資料夾當作工作區,選擇左上角的檔案 > 開啟資料夾 ## 插件介紹 ### C & C++ #### 前置設定 + 在 Windows 上安裝 [Mingw-w64](https://tinyurl.com/ybklb2cm),Mingw 是 Windows 上面用來編譯 C 語言的編譯器,其實在 Code Blocks 裡面也有這份編譯器 + 安裝時 Architecture 選擇 x86_64,安裝好之後把編譯器加到 **系統路徑 (PATH)** 內 :::info **系統路徑 (PATH)** 是相當重要的概念,以後會很常用 ::: + 插件設定: + `"C_Cpp.intelliSenseEngine": "Tag Parser"` + Include Path + Compile Path + task.json ```json= { "version": "2.0.0", "tasks": [ { "type": "shell", "label": "C/C++: gcc.exe build active file", "command": "C:\\Program Files (x86)\\CodeBlocks\\MinGW\\bin\\gcc.exe", "args": [ "-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "C:\\Program Files (x86)\\CodeBlocks\\MinGW\\bin" }, "problemMatcher": [ "$gcc" ], "group": "build" } ] } ``` + launch.json ```json= { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\\Program Files (x86)\\CodeBlocks\\MinGW\\bin\\gdb32.exe", "setupCommands": [ { "description": "啟用 gdb 的美化顯示", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] } ``` #### 編譯指令 + 使用 `gcc` 指令編譯程式碼的格式如下: + `$ gcc [原始碼檔名] -o [執行檔檔名]` + 如果沒有加上 `-o [執行檔檔名]` 則預設會是 `a.exe` + 執行程式: + 若是使用 CMD 則可以輸入 `main.exe` 或者 `main` + 若是使用 PowerShell 則是 `.\main.exe` 或 `./main.exe` + 連鎖指令: + 可以使用一行指令串起兩個動作 + CMD: `gcc main.c -o main.exe & main.exe` + PowerShell: `gcc main.c -o main.exe; ./main.exe` + 極度懶惰版: + `gcc main.c & a` + 輸入輸出導向 + `main.exe > out.txt` 把程式輸出導向到 `out.txt` + `main.exe < inn.txt` 將 `inn.txt` 輸入到程式裡面 + 組合技:`main.exe < inn.txt > out.txt` + 範例程式碼 A: ```c= #include <stdio.h> int main() { int sum = 0; for (int i = 0; i < 10; i++) sum += i; printf("Result: %d\n", sum); return 0; } ``` + 範例程式碼 B: ```c= #include <stdio.h> #include <math.h> int main() { for (int i = 0; i < 10; i++) printf("sqrt(%d) = %.4lf\n", i, sqrt(i)); return 0; } ``` #### 組建工作 + 建置作業 Build Task 定義了一系列用來建置執行檔的作業 + 「終端機 > 設定預設組建工作」來新增組建工作 + 「終端機 > 執行組建工作」或者按下 Ctrl + Shift + B 進行建置 #### 除錯模式 + 除錯器 Debugger 讓開發人員可以在開發過程中進行除錯 + VSCode 提供了相當好用的除錯模式界面 + 在除錯模式下可以設定中斷點來短暫的暫停程式 + 「執行 > 啟動偵錯」或者按下 F5 進入偵錯模式 + 「執行 > 執行但不進行偵錯」或者按下 Ctrl + F5 可以直接執行程式 + 將變數新增到 Watch 監測變數狀態 + 也可以寫 Expression 在 Watch 裡面 ### SSH Remote + ssh user@140.121.199.227 -p 49156 #### 安裝編譯與除錯工具 + `$ sudo apt install gcc g++ gdb` + 設定 Include Path 和 Compile Path ### 其他推薦的插件 #### Path Autocomplete + 自動提示與完成程式碼中的路徑輸入 #### AutoTrim + 適合強迫症患者 + 也可以按 Ctrl + K, Ctrl + X #### Markdown All in One + VSCode 也很適合撰寫 Markdown 文件 + 有 Preview 功能、文件間的 Link 還能創建索引目錄 + HackMD 也有自己的插件 + 不過會覆蓋掉所有 Markdown 的 Preview #### Partial Diff + 比較工具