APP下载

现在这么多程式语言可学 为什么还要学那么旧的C语言?有用吗?

消息来源:baojiabao.com 作者: 发布时间:2024-05-13

报价宝综合消息现在这么多程式语言可学 为什么还要学那么旧的C语言?有用吗?

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

编写操作系统最常用的程式语言就是C语言了

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

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

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

拉丁语是前面列举的这些语言的基础

同样的道理,C语言在高阶程式语言史上足够年长,它是开发其他高阶程式语言的参考,所以,学习了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语言编写的操作系统一般都会使用同样由C语言编写的系统库,这些系统库(例如 strcpy(),printf() 等)会被继续使用,编写更高级别的库,例如 OpenGL、GTK 等,设计这些库时通常就会决定系统库使用的程式语言。接着,程式开发人员会呼叫这些高阶库,开发相应的应用程序,例如游戏、媒体播放器等。

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

C语言与其他高阶程式语言的区别与联络

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

C语言与其他高阶程式语言的区别与联络

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

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

C语言允许程序员直接向内存写入资料

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

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

点个赞再走吧

欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

2019-07-05 00:48:00

相关文章