为什么要学习C语言?

编写操作系统最常用的编程语言就是C语言了。用C语言编写的第一个操作系统是 Unix,之后的 GNU/Linux 等操作系统也都是使用C语言编写的。

C语言不仅仅是操作系统语言,也是当今几乎所有流行的高级编程语言的先驱,这些编程语言多多少少都借鉴了C语言的架构和优点。甚至,有些编程语言的编译器(或者解释器)本身就是C语言编写的,例如 Perl、PHP(世界上最好的编程语言)、Python 和 Ruby 等。

所以为什么要学习C语言呢?

对比到人类语言,假设有人要学习西班牙语、意大利语、法语或者罗马尼亚语,你认为他之前学的拉丁语会有所帮助吗?答案是肯定的,因为拉丁语是前面列举的这些语言的基础,或者说来源。

同样的道理,C语言在高级编程语言史上足够年长,它是开发其他高级编程语言的参考,所以,学习了C语言不仅仅能够编写C语言程序,对学习其他编程语言也是帮助极大的,从其他编程语言里,多多少少都能看到C语言的影子。

可以说,如果把学习编程比作小说里的学习武功,那学会了C语言就相当于学会了“九阳神功”,再学习其他编程语言时就如有神助,事半功倍。

为什么不从汇编语言开始呢?

的确,汇编语言可以提供程序效率的最大限度控制,但是汇编程序的可移植性很差,而C语言则提供了程序的可移植性。

不同的处理器是用不同的汇编语言编程的,只学习一种处理器的汇编编程局限性就太大了。事实上,C语言的一个主要优点就是它将通用型和跨各种计算机体系结构的可移植性结合在一起,同时保留了汇编语言提供的绝大部分的硬件控制。

例如,程序员编写的C语言程序,可以在 HP 50G 计算机(ARM 处理器)、TI-89 计算机(68000 处理器)、Palm OS Cobalt智能手机(ARM处理器)、iMac(PowerPC)、Arduino(Atmel AVR)和 Intel iMac(Intel Core 2 Duo)等不同架构的设备上编译和运行。

如果使用汇编语言编写的程序,要想在这些不同架构的设备上运行,那么每一个设备都得单独编写程序,不仅开发困难,后期的维护也会非常难受。

另外,汇编虽然功能非常强大,但是对于大型项目来说太难编程了,很难以方便的人类逻辑方式读取和解释数据。C语言则是一种编译语言,可以更高效的快速创建可执行程序,它也是一种“所见即所得”的编程语言。

由C语言编写的操作系统一般都会使用同样由C语言编写的系统库,这些系统库(例如 strcpy(),printf() 等)会被继续使用,编写更高级别的库,例如 OpenGL、GTK 等,设计这些库时通常就会决定系统库使用的编程语言。接着,程序开发人员会调用这些高级库,开发相应的应用程序,例如游戏、媒体播放器等。

C语言将通用功能封装成库,并供其他库或者应用程序使用,这种模式被很多其他高级语言继承。

C语言与其他高级编程语言的区别与联系

C语言被设计时遵守的宗旨是:保持性能的同时生成可移植代码,并尽量减少开销(CPU 时间,内存占用,磁盘 I/O 等)。这对于操作系统,嵌入式设备或者其他对性能要求苛刻的程序开发很有用(“高级”接口肯定会影响性能)。

C语言是 Unix 系操作系统中的“原生(native)”编程语言,这使得在这些系统中运行的C语言程序可以具备最大程度的灵活性和可移植性。经过这么多年的洗礼,C语言没有被淘汰,它稳步发展,已经成为一种成熟的编程语言。鉴于多数操作系统和基础工具都是使用C语言编写的,并且被移植到很多平台上,C语言在未来很长一段时间里,是不可能被淘汰的。

与大多数编程语言不同,C语言允许程序员直接向内存写入数据。C语言中的关键结构(如结构、指针和数组)被设计为以高效的、与机器无关的方式构造和操作内存。

此外,动态内存分配和释放由程序员控制,这使得C语言程序使用的资源具备很高的确定性和可操控性。像 Java 和 Perl 这样的语言提供垃圾回收机制,将程序员照顾的很好,使程序员不必管理内存分配和指针的大部分细节。这很有用,因为在构建高级程序时处理内存分配是一个非常容易出错的过程。但是,在处理低级代码(如控制设备的操作系统部分)时,C语言提供了一个统一、简洁的接口。这些功能在大多数其他语言中都不存在。

虽然 perl、php、python 和 ruby 很强大,并且支持许多C语言中默认不提供的特性,但它们通常不是用自己的语言实现的。相反,大多数这样的语言最初都依赖于用C语言(或另一种高性能编程语言)编写,并且需要在使用它们之前将它们的实现移植到对应的平台上。

阅读更多:   C语言
添加新评论

icon_redface.gificon_idea.gificon_cool.gif2016kuk.gificon_mrgreen.gif2016shuai.gif2016tp.gif2016db.gif2016ch.gificon_razz.gif2016zj.gificon_sad.gificon_cry.gif2016zhh.gificon_question.gif2016jk.gif2016bs.gificon_lol.gif2016qiao.gificon_surprised.gif2016fendou.gif2016ll.gif