推荐书目名称或网址
linux c 编程 一站式学习
适合阅读此书或网站的程度/对象
初学者
简介
在 linux 上学习 c 语言的书
读后心得
inux c 编程 一站式学习 60
( https://goo.gl/XB8C2c )
20111212 购于台南若水堂, 60X6 = 360 nt。
市面上有好多好多的 C 语言书籍 (当然还有 c++, 而且很多内容都很类似),
我已经有了 The C Programming Language, 还需要其他的吗? (还真的需要)
实际上我的 C 语言书籍不多, 大部份是 C++ 相关书籍。我大多是从 c++
书籍上顺便学习 c。这本书能吸引我的目光是因为作者提到了汇编 (组合语言) 与
C 关系, 详细解释了 crt.o 和组合语言之间的关系, 还有 linker 的东西,
这对我来说可是如获至宝, 只因为三个章节的内容 (17, 18, 19), 我就买了,
书中应该超过一半是我已经知道的东西吧! 不过令一半的东西很重要,
我讶异我自己竟然不知道。这三章的内容是作者参考 programming from the ground up
来的。
而程式设计师的自我修养 ( http://goo.gl/sqUf81 )比较详细。
买回家细看之后, 比我想的更值回票价, 书中提到的 c99, 让我对有些 c99
语法有了概念, 原来某些我不太理解的语法是 C99 的用法。
第 14 章在说明 c 语言复杂的转换规则, 有 Usual Arithmetic Conversion,
Integer Promotion, 再去看 c 规格书应该会容易些。
你知道 0 - 1 的 0 和 1 是 int 还是 unsinged int type 吗?
c 语言规定了繁复的转换规则, 0 和 1 会被转成 int 再做减法, 所以结果是 -1
而不是 4294967295, 14.3 是这章的精华, 得花点脑筋才能吸收, 坦白说,
这对初学者实在太深, 有个印象就好, 知道有这回事,
尽量不要处碰到这些悔涩的的地带。
p174 有个表在说明 IPL32, PL64 这个术语。
I: int
L: long
P: pointer
15.3 介绍了 side effect, sequence point, 就是 a = a++; 这种烦人的东西。
而第 17 章 - x86 汇编程序基础 (组合语言基础), 让人受用, 借由 readelf
让我得知 obj 和 elf 执行档案的内容, 虽然只是短短的一章, 需要不少脑力,
若在书店看, 得好好找张椅子慢慢消化, 买回家读还是舒服些。
内容和程式设计师的自我修养 - 连结、加载、程式库很类似,
不过提到的东西比较少。若看的吃力, 那读程式设计师的自我修养可能会难了点。
chapter 18 从 c runtime crt*.o 开始, 分析这些 .o, 当然要出动 objdump。
在分析变量是怎么储存在内存、执行档里头以及 bss, 我认为这个有点难,
看不懂对于学习 c 不成问题, 但搞懂会为你的功夫打下基础,
再也没有任何事情可以难倒你。
volatile 的解释也很棒, 用反组译来带你理解这个关键字,
可不是没感觉的文字描述而己。
chapter 19 详细解释 linker 的行为, 对于初学者这太难了。看不懂先跳过吧!
我都搞不清楚这到底是入门书还是进阶书了。
chapter 21 讲述 makefile 让我对 make 有了另外的认识, 我觉得很受用,
书上提供了 gcc -MM 的 makefile rule, 在大型程式中很好用。
23.6 介绍了不定个数的参数, 就是 printf 的参数用法, 可不是单纯讲解 va_ 那 3 个
function, 还自己实作这三个 function, 又是有点难的小节。
chpater 24 介绍了 c 标准程式库, 还介绍了 man page 的看法。
附录 A 讲述 unicode, utf8 编码, 短短的篇幅却给了很基本的观念。
官网 (作者宋杉开放这本书, 本书可在这里取得电子版本, 这真是不简单):
http://songjinshan.com/akabook/zh/index.html
old version: http://akaedu.github.io/book/
补充说明(Supplement):