---
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
+ 比較工具