可先学c 语言本身开始,经典的 c 书籍很多。推荐一本 c prime plus 5th edition
ubuntu/macosx 下都有命令行工具,使用 gcc/clang 编译器,很方便。可以从简单的 c 代码写起。
hello world, 简单的算法,比如排序,链表等。可以找一本算法书,尝试实现里面简单的算法。
这些之后,c 的基础知识就能掌握,c 的数据类型,控制语句,宏,以及指针的运用等。
c 的标准库,这时也会了解一部分,但只需要过一遍即可。要注意 c 的标准,c89/c99 等,编译器现在默认都是 c89, 建议你开始学 c99 即可。编译器加 -std=c99 参数。相对来说 c99 代码写起来稍微简单一些(如果是从动态语言转过去的话),比如可以在 for 里面可以申明变量,有 bool 类型支持等。等需要阅读参与开源项目时,再去了解 c89 的细节。因为 c89 更跨平台,许多项目是 纯 c89 实现的(比如 lua)。
这之后,就可以学习 unix 环境编程(参考 @
chisj 推荐的《unix 环境高级编程》),了解 unix/linux 下的进程模型,这是 c 进阶的关键,这是就会了解到程序是被内核启动的,内存是如何分布以及被申请和释放,以及堆栈模型等等。
最后,可能你要开始某个领域的编程了,比如网络编程。这时候也需要去了解硬件模型了,同时不同领域有许多不同的系统库,以及该领域的第三方库等等。epoll 是 linux 2.5 之后的网络事件库,但 macosx 下是另外一种 kqueue/kevent。
UNIX c 开发中除了理论知识,还有许多技巧、经验以及对其中文化的领悟(推荐 《UNIX 编程艺术》),需要经年积累与实践,才会有些成就做出来。
C 开发,是我最纯粹、最愉悦的编程体验。希望你也感受到。
以上是我的 C 开发经验之谈。