-
Notifications
You must be signed in to change notification settings - Fork 78
陳鍾誠 edited this page May 17, 2018
·
19 revisions
C 詭異離奇,缺陷重重,卻獲得了巨大的成功 (Dennis Ritchie)
- C 語言教材 -- https://mdbookspace.com/view/ccc/c1.md
- 專為中學生寫的 C 語言程式書 -- https://mdbookspace.com/view/c/
- 高等C語言 (gitbook) -- https://shengwen1997.gitbooks.io/program_with_c/content/
- 用 C 語言寫《嵌入式作業系統》 -- https://mdbookspace.com/view/c0/
我們使用 gcc ,gcc 的安裝方法請參考下列網址:
- C/C++ 語言新手十三誡(The Thirteen Commandments for Newbie C/C++ Programmers), by Khoguan Phuann
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
- 宣告 int a[10] 後,如果真的存取 a[10] 就完蛋了 ... (因為只有 a[0..9] ...)
- 在指標參數裡修改指標是沒用的 .... (因為指標參數傳的也是《位址值》)
$@ : 該規則的目標文件 (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 成功。