---
# System prepended metadata

title: C語言的推薦

---

# C語言的推薦

## 前言
> 寫C語言最好的方式，就是不要寫C語言。
> C語言使用者必須自行尋找第三方庫

這就是我在進入推薦環節之前要說的話，現今市面上有很多比C要好用的程式語言，像開發快速的Golang、生態系完整的Java、更具嚴謹性的Rust，甚至是C++都比寫C要好。
如果你不是想深入了解計算機系統或進行高效能和嵌入式開發，那C語言不會是你的選擇。

看來你心意已決（~~想告別紅塵~~），那歡迎來到C語言的世界。

### 清單
* 《透視C語言指標》Understanding and using c pointers
* 《21世紀的C語言》21st Century C
* Linux 核心設計/實作
* glibc

## 《透視C語言指標》
這本書最主要就是建立如何安全使用指標，與堆疊（Stack）和堆積（heap）的記憶體管理概念。
內容簡單，主要模型十分精簡，主內容並沒有涵蓋多線程的數據競爭。

> 1. 入門
> 2. C語言的動態記憶體管理
> 3. 指標與函數
> 4. 指標與陣列
> 5. 指標與字串
> 6. 指標與結構
> 7. 安全問題與不當使用指標
> 8. 其他補充

## 《21世紀的C語言》
將C語言現代化是一件十分重要的事情，我們現在的C語言教材都停留在1990年以前，C語言剛剛起步的時候。這忽略了編譯器、軟體工程概念、Debug等等，將C語言投入開發的必備技能，這本就來試圖將他補足。

內容主要分兩個部分，環境與語言。
環境的部分，主要是在說明工具的使用，像連結第三方程式庫、使用Make構建項目（我推cmake）、用git建立版本控制。
語言的部分才是重頭戲，先再次說明了一下指標，再來稍微講了一下在教科書範例上過度強調的語法，之後是巨集用法到更好使用結構。最後是C語言的物件導向設計是傳統的物件導向，概念是有一組中心資料結構，各自帶一組操作中心資料結構的函式。

> 環境
> 
> 1. 簡化編譯過程的設定
> 2. 除錯、測試、文件
> 3. 打包專案
> 4. 版本控制
> 5. 攜手合作（動態連結外部程式庫）
> 
> 語言
> 
> 6. 指標好夥伴
> 7. 教科書過份強調的進階語法
> 8. 教科書輕忽過的重要語法
> 9. 簡化文字處理
> 10. 更好的結構
> 11. C語言的物件導向程式設計
> 12. 平行執行緒
> 13. 函式庫


## Linux 核心設計/實作

[http://wiki.csie.ncku.edu.tw/linux/schedule](http://wiki.csie.ncku.edu.tw/linux/schedule)
很好的課程，來自成大資工。
可以讓你對計算機的理解超越大部分程序員。
C語言本身就是伴隨Unix開發而出現的，要了解C語言的使用必須要理解計算機系統。
使用《深入理解計算機系統》

## glibc

glibc(GNU C Library)基本上是C和POSIX標準的官方實踐，本身就有完整的說明文件可以閱讀，讓你可以快速找到需要的函式與使用方式。
https://www.gnu.org/software/libc/manual/