C语言特性:
- C语言是一个静态弱类型语言,在使用时需要声明变量类型,但是类型间可以有隐式转换。
- 不同的变量类型可以用结构体组合在一起,以此来声明新的数据类型。
- C语言可以用typedef关键字来定义类型的别名,以此来达到变量类型的抽象。
- C语言是一个有结构化程序设计,具有变量作用域以及递归功能的过程式语言。
- C语言传递参数一般是以值传递,也可以传递指针。
- 通过指针,C语言可以容易地对内存进行低级控制,然而这加大了编程复杂度。
- 编译预处理让C语言的编译更有弹性,比如跨平台。
C语言的这些特性,可以让程序员在微观层面写出非常精细和精确的编程操作,让程序员可以在底层和系统细节上非常自由,灵活和精准地控制代码。
如果说,程序 = 算法 + 数据,C语言会有如下问题:
- 一个通用的算法,需要对所处理的数据的数据类型进行适配。但在适配数据类型的过程中,C语言只能使用void * 或 宏替换的方式,这两种方式导致了类型过于宽松,并带来很多其它问题。
- 适配数据类型,需要C语言在泛型中加入一个类型的size,这是由于C语言识别不了被泛型后的数据类型,并且没有运行时类型识别,所以,只能将这个工作抛给调用泛型算法的程序员来做。
- 算法其实是操作数据结构,而数据则是放到数据结构中的,所以,真正的泛型除了适配数据类型外,还要适配数据结构,最后这个事情导致泛型算法的复杂度急剧上升。
- 在实现泛型时,会纠结哪些东西应该抛给调用者处理,哪些又是可以封装起来。如果平衡和选择,并没有定论。
C语言的设计理念:
- 相信程序员
- 不会阻止程序员做任何底层的事
- 保持语言的最小和最简的特性
- 保证C语言的最快运行速度,哪怕牺牲移植性
C语言的伟大之处在于:使用C语言的程序员在高级语言的特性之上还能简单地做任何底层上的微观控制。