一站式学习C编程

宋劲杉

出版时间

2011-03-01

ISBN

9787121129827

评分

★★★★★

标签

编程

书籍介绍
翻开这本书,最先打动人的往往不是它讲了多少语法,而是作者对“程序究竟如何运行”这件事近乎执拗的较真。当别的入门书一句“类型转换”带过,它却带你算清~c在Integer Promotion之后从0xfc变成ffffff03的每一步;当别人告诉你有符号数也能做位运算,它提醒你x86编译器会生成更快的xorl指令而非访问内存。这种从体系结构、操作系统层面反哺C语法的写法,让读者第一次感到语法背后站着真实的CPU与栈帧。它适合那些不满足于“能跑就行”、愿意追问“为什么”的人;也提醒初学者:真正扎实的基础,建立在对原理的透彻理解之上,而非语法规则的机械记忆。
作者简介
宋劲杉,亚嵌教育资深讲师,清华大学自动化系硕士,6年嵌入式系统开发经验,3年嵌入式行业教学经验,精通Linux内核、POSIX、TCP/IP,擅长ARM平台的Linux系统移植和应用开发,目前关注的方向有分布式系统、动态语言。爱好:开源软件、电子音乐、HomeParty
AI导读
核心看点
  • 以Linux为载体深入讲解C语言语法与原理
  • 结合操作系统知识剖析程序底层运行机制
  • 系统介绍程序设计思想与开发调试方法
读者共识
  • 逻辑清晰严谨,优于传统填鸭式教材
  • 国产技术书籍佳作,作者态度认真负责
  • 内容全面深入,适合构建完整知识体系
精彩摘录
  • "尽管函数式宏定义和真正的函数相比有很多缺点,但只要小心使用还是会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现。"
  • "在函数式宏定义中,#运算符用于创建字符串,#运算符后面应该跟一个形参(中间可以有空格或Tab) #define STR(s) # s STR(hello world) 在宏定义中可以用##运算符把前后两个预处理Token连接成一个预处理Token,和#运算符不同,##运算符不仅限于函数式宏定义,变量式宏定义也可以用。 #define CONCAT(a, b) a ## b CONCAT(con, cat)"
  • "C标准规定了几个特殊的宏,在不同的地方使用可以自动展开成不同的值,常用的有__FILE__和__LINE__,__FILE__展开为当前源文件的文件名,是一个字符串,__LINE__展开为当前代码行的行号,是一个整数。"
  • "~运算符也要做Integer Promotion,所以在C语言中其实并不存在8位整数的位运 算,操作数在做位运算之前都至少被提升为int型了"
  • "计算过程是这样的:常量0xfc是int型的,赋给c要转成unsigned char,值不变;c的十六进制表示 是fc,计算~c时先提升为整型(000000fc)然后取反,最后结果是ffffff03。注意,如果把~c看成 是8位整数的取反,最后结果就得3了,这就错了。为了避免出错,一是尽量避免不同类型之间的赋 值,二是每一步计算都要按上一章讲的类型转换规则仔细检查。"
  • "由于类型转换和移位等问题,用有符号数做位运算是很不方便的,所以,建议只对无符 号数做位运算,以减少出错的可能。 一个数和自己做异或的结果是0。如果需要一个常数0,x86平台的编译器可能会生成这样的指 令:xorl %eax, %eax。不管eax寄存器里的值原来是多少,做异或运算都能得到0,这条指令比同 样效果的movl $0, %eax指令快,因为前者只需要在CPU内部计算,而后者需要访问内存"
  • "x ^ x ^ y == y,因为x ^ x == 0,0 ^ y == y。这个性质有什么用呢?我们来看这样一个问题:交 换两个变量的值,不得借助额外的存储空间,所以就不能采用temp = a; a = b; b = temp;的办法 了。利用位运算可以这样做交换:"
  • "习题 1、上面打印的小九九有一半数据是重复的,因为8*9和9*8的结果一样。请修改程序打印这样的小九九: 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81"
目录
《一站式学习c编程》
上篇 c语言入门
第1章 程序的基本概念 2
1.1 程序和编程语言 2
1.2 自然语言和形式语言 6

显示全部
用户评论
买这本书是想学习一下怎么Makefile,最后还是放弃了。作者试图写一本不一样程序设计入门书籍,很多部分的讲解都很赞,然后其实我还是没学会Makefile,做起来和看完全是两码事。
有些地方讲得过于繁复,Linux部分难度略大,不过仍然是本很好的书。
来龙去脉讲得清楚,也涵盖了Linux部分,国内中文教材算上等了。
用这样的书为基础来做教材才是大学生的幸福。关于 C语言说得有模有样,不过Linux 该说的就基本没有讲到。 但是写作的思路是对的,很好。
终于明白还是太嫩了。。。修行在自身噶~,我将上下而求索!
这本书的整体思路非常不错,大部分的C语言相关内容都有介绍了,不过很多地方如果没有前置知识看起来会很头疼,大部分地方的篇幅不够,需要额外的找资料学习。下篇的原理篇建议先看看CSAPP。另外就是代码排版不太好。
名不副实, 比较一般.
这是一本包罗万象的书啊,适合大一的学生。作为教材太合适了。
扔掉谭C换这本书吧,国人写的这么好的真的不容易。不过后半部分大量涉及到汇编等底层原理,对初学者反倒不友好了。
@2017-08-28 00:09:45
下载
收藏