Skip to content
陳鍾誠 edited this page May 17, 2018 · 19 revisions

C 語言

C 詭異離奇,缺陷重重,卻獲得了巨大的成功 (Dennis Ritchie)

教材

安裝

我們使用 gcc ,gcc 的安裝方法請參考下列網址:

陷阱

01. 不可以使用尚未給予適當初值的變數                                     3/46
02. 不能存取超過陣列既定範圍的空間                                       5/90
03. 不可以提取不知指向何方的指標                                         7/134
04. 不要試圖用 char* 去更改一個"字串常數"                               12/244
05. 不能在函式中回傳一個指向區域性自動變數的指標                        16/332
06. 不可以只做 malloc(), 而不做相應的 free()                            19/398
07. 在數值運算、賦值或比較中不可以隨意混用不同型別的數值                21/442
08. ++i/i++/--i/i--/f(&i)哪個先執行跟順序有關                           24/508
09. 慎用Macro                                                           27/574
10. 不要在 stack 設置過大的變數以避免堆疊溢位(stack overflow)           32/684
11. 使用浮點數精確度造成的誤差問題                                      35/750
12. 不要猜想二維陣列可以用 pointer to pointer 來傳遞                    36/772
13. 函式內 new 出來的空間記得要讓主程式的指標接住                       40/860
  1. 宣告 int a[10] 後,如果真的存取 a[10] 就完蛋了 ... (因為只有 a[0..9] ...)
  2. 在指標參數裡修改指標是沒用的 .... (因為指標參數傳的也是《位址值》)

Makefile

$@ : 該規則的目標文件 (Target file)
$* : 代表 targets 所指定的檔案,但不包含副檔名
$< : 依賴文件列表中的第一個依賴文件 (Dependencies file)
$^ : 依賴文件列表中的所有依賴文件
$? : 依賴文件列表中新於目標文件的文件列表
$* : 代表 targets 所指定的檔案,但不包含副檔名

?= 語法 : 若變數未定義,則替它指定新的值。
:= 語法 : make 會將整個 Makefile 展開後,再決定變數的值。

範例 1 :

%.o: %.c
    gcc -c $<

$< : 屬於第一條件,也就是 foo.c
$@ : 屬於目標條件,也就是 foo.o

範例 2 : https://github.com/jserv/mini-arm-os/blob/master/07-Threads/Makefile

專案

課程

底層技術

編譯器

單元測試

開發環境

  • git bash (含 MinGW)

在 git bash 下編譯 CUnit 成功。

參考文獻