C 語言 vs. Python
比較 C 語言與 Python 的核心差異,理解記憶體管理、型別系統與效能特性,探索兩者的應用場景與優勢。
目標
- 幫助 已學過 Python 的學生 快速理解 C 語言的不同之處。
- 讓學生掌握 C 的基本語法,為後續學習 C + WASM 做準備。
- 說明 為何選擇 C + WASM 來學習系統級開發。
1. C vs. Python 基本比較
語言類型
語言 | 類型 | 主要特點 |
---|---|---|
Python | 直譯式 (Interpreted) | 由直譯器逐行執行,開發快速,適合腳本與資料處理。 |
C | 編譯式 (Compiled) | 需經過編譯後執行,運行速度快,適合系統級開發。 |
高階語言 VS 低階語言
- Python 屬於 高階語言,更接近人類語言,開發容易但較慢。
- C 屬於 低階語言,更貼近硬體,開發較難但執行效能高。
記憶體管理
語言 | 方式 | 特色 |
---|---|---|
Python | 自動管理 | 內建 垃圾回收 (GC),自動釋放不再使用的記憶體。 |
C | 手動管理 | 使用 malloc() 配置記憶體,free() 釋放,需小心管理避免記憶體洩漏。 |
變數與型別
語言 | 型別系統 | 宣告方式 |
---|---|---|
Python | 動態型別 (Dynamically Typed) | x = 10 ,可隨時改變型別。 |
C | 靜態型別 (Statically Typed) | int x = 10; ,型別在宣告時確定,不能更改。 |
字串處理
語言 | 處理方式 |
---|---|
Python | 內建 str 型別,支援 .upper() 、.replace() 等操作。 |
C | 使用 char 陣列 (char str[] = "Hello"; ),需用 string.h 提供的函式操作。 |
函式定義
語言 | 定義方式 |
---|---|
Python | def add(a, b): return a + b |
C | int add(int a, int b) { return a + b; } |
差異:
- C 需要 明確定義型別 (
int a, int b
) - Python 無需指定型別
2. 範例程式比較
(1) Hello, World!
Python
print("Hello, World!")
C
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
差異點:
- C 需要
#include <stdio.h>
標頭檔 - C 需要
main()
函式作為程式入口 - Python 使用
print()
,C 則使用printf()
- C 需要
return 0;
來表示程式成功執行
(2) 變數與型別
Python
x = 10
y = 3.14
z = "Hello"
C
int x = 10;
float y = 3.14;
char z[] = "Hello";
差異點:
- C 變數必須明確指定型別
- C 沒有內建字串型別,需要
char[]
(3) 迴圈
Python
for i in range(5):
print(i)
C
#include <stdio.h>
int main() {
for (int i = 0; i < 5; i++) {
printf("%d\n", i);
}
return 0;
}
差異點:
- C 需要明確定義
int i
- C 需要
printf("%d\n", i);
來格式化輸出 - Python 有
range()
,C 需要手動控制條件
(4) 函式
Python
def add(a, b):
return a + b
print(add(3, 5))
C
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
printf("%d\n", add(3, 5));
return 0;
}
差異點:
- C 函式需要定義回傳型別 (
int add(int a, int b)
) - C 需要
main()
作為程式入口
3. C 語言的關鍵特性
- 指標 (Pointers):C 提供指標 (
int *ptr
),可直接操作記憶體。 - 手動記憶體管理:C 需要手動使用
malloc()
和free()
來配置與釋放記憶體。 - 編譯 vs. 直譯:
- Python 直接執行 (
python script.py
) - C 需要先編譯 (
clang -o hello.exe hello.c
) 後執行 f(hello.exe
)
- Python 直接執行 (
範例:hello.c
#include <stdio.h>
int main(void) {
printf("hello clang!\n");
return 0;
}
用 clang 編譯成 EXE (成功後會再資料夾多一個 hello.exe 檔案)
clang -o hello.exe hello.c
執行 EXE
./hello.exe
4. C + WASM:為何選擇這條路?
- C 是系統級語言,適用於 嵌入式、作業系統、效能要求高的應用。
- WebAssembly (WASM):
- 可讓 C 直接 運作於在瀏覽器內,效能超越 JavaScript!
- 可在類似於
wasmer
容器中執行。 - 提供接近 原生效能,且能跨平台執行。
範例:用 wasm32-wasi-clang 編譯成 WASM
wasm32-wasi-clang --sysroot=$env:WASI_SYSROOT_PATH -o hello.wasm hello.c
這讓 C 程式能在 瀏覽器或 WASI 環境 執行!
範例:用 wasmer
執行 hello.wasm
wasmer run ./hello.wasm
結論
- C 與 Python 各有優勢,C 更接近系統,適合高效能應用。
- C + WASM 提供強大組合,讓 C 可在 瀏覽器與系統 皆能運行!
- 本課程將會進一步深入 C 語言與 WebAssembly 🚀