Linux C编程一站式学习

宋劲杉

出版时间

2009-12-01

ISBN

9787121097713

评分

★★★★★
书籍介绍
本书有两条线索,一条线索是以Linux平台为载体全面深入地介绍C语言的语法和程序的工作原理,另一条线索是介绍程序设计的基本思想和开发调试方法。本书分为两部分:第一部分讲解编程语言和程序设计的基本思想方法,让读者从概念上认识C语言;第二部分结合操作系统和体系结构的知识讲解程序的工作原理,让读者从本质上认识C语言。. 本书适合做零基础的初学者学习C语言的第一本教材,帮助读者打下牢固的基础。有一定的编程经验但知识体系不够完整的读者也可以对照本书查缺补漏,从而更深入地理解程序的工作原理。本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一,也适合作为高等院校程序设计基础课程的教材。本书对于C语言的语法介绍得非常全面,对C99标准做了很多解读,因此也可以作为一本精简的C语言语法参考书。...
AI导读
核心看点
  • 以Linux为载体,深入讲解C语言语法与程序工作原理
  • 结合操作系统与体系结构,从本质层面剖析C语言
  • 涵盖程序设计思想、开发调试方法及C99标准解读
适合谁读
  • 零基础初学者,作为学习C语言的第一本教材
  • 有编程经验但知识体系不完整,需查缺补漏者
  • 高校学生及嵌入式Linux系统工程师培训学员
读前提醒
  • 建议优先阅读开源电子版,内容比纸质版更丰富
  • 需具备操作系统、组成原理等基础,否则较难懂
  • 部分硬核内容如汇编可跳过,重在建立系统认知
读者共识
  • 国产技术书佳作,内容严谨且具系统性,值得精读
  • 相比传统教材,更注重编程思想与底层原理的贯通
  • 纸质版已绝版,强烈推荐使用作者维护的开源版本

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "尽管函数式宏定义和真正的函数相比有很多缺点,但只要小心使用还是会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现。"
  • "在函数式宏定义中,#运算符用于创建字符串,#运算符后面应该跟一个形参(中间可以有空格或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语言是一门很难的编程语言,不懂编译原理、操作系统和计算机体系结构根本不可能学明白,那半个学期自然就浪费掉了。当时几乎所有学校的计算机相关专业都是这样,大一上来就学C语言,有的学校更疯狂,上来就学C++,导致大多数学生都以为自己会C语言,但其实都是半吊子水平,到真正写代码的时候经常为一个Bug搞得焦头烂额,却没有机会再系统地学一遍C语言,因为在学校看来,C语言课早在大一就给你“上完了”,就像一顿饭已经吃完了,不管你吃饱没吃饱,不会再让你
看了一半..只了解了C的基本语法,更hardcore的地方,实在看不下去诶..
就Linux下C编程的入门而言,(如果第三部分能补上)这本恐怕是目前最好的了,难得的是:这是国产的,丝毫不逊色于《Beginning Linux Programming》。
: TP312/3914-3
https://akaedu.github.io/book/ch19s01.html在线文档,学习基本的调试和编码
还行,但不够好看。正在看c primer plus ,一对比差距就大了
@2021-06-16 23:26:58
不适合新手(当然前面语言部分适合)一本很全的书,后面内容也很不错,适合看这本书进行总结复习。
启蒙好书,印象深刻
下载
收藏