我们为什么要学C语言?

开发 后端
C语言,似乎是一门很久远的语言了。但是身为程序员的我们,都对C语言有所了解。究竟我们为什么要学习C?

C是写操作系统最常使用的编程语言(译注:没有之一)。Unix是用C写的第一个操作系统。后来Microsoft Windows,Mac OS X,还有GNU/Linu也都是用C写的。C不仅是操作系统的语言,也是其它几乎所有今天最流行的高级语言的先驱和灵感来源。事实上,Perl,PHP,Python和Ruby都是用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是如此流行的语言的原因?  

就像推度多米诺骨牌一样,下一代的程序跟随着它的先辈的足迹。用C设计的操作系统通常都有用C设计的系统库。这些系统库反过来用于构建高级库(如OpenGL,或者GTK),这些库的设计者通常又会采用系统库所使用的语言。高级库又被应用级开发者用来设计字处理程序、游戏、媒体播放器等诸如此类。他们多数会选择采用高级库所使用的语言来编程。这种模式就这样如此如此进行...  

为什么是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给出了在数据结构的内存层上的控制方法。此外,动态内存分配是程序员掌控,这必然意味着内存重分配成为了程序元的负担。而Java和Perl之类的语言则将程序员从对内存分配和指针的担心之中解救出来。一般而言这是件好事,因为写高级程序时处理内存一个很容易出错的过程。然而,当处理低层代码时,例如操作系统控制一个设备的部分,C提供了一个统一清晰的接口。在其它的高级语言如Java中则没有这些性能。  

Perl、PHP、Python和Ruby这些语言可能很强大,能支持许多C缺省不支持的特性,而一般这些语言是不能用自己实现的。恰恰相反,这些语言多数最初都是依赖C(或者另一种高性能编程语言)写成,而且使用之前必须先要移植到新平台上。  

与所有编程语言一样,是否优先选择C语言要视技术和商业需求而定

【编辑推荐】

  1. C语言对象编程构思
  2. C语言中的面向对象思想
  3. C语言中的DIV的用法及DIVAB概念解析
  4. 详解Linux系统下搭建C语言开发环境
  5. 妙趣横生的算法(C语言实现)
责任编辑:彭凡 来源: 译言
相关推荐

2022-11-28 09:58:58

C++开发

2010-01-22 15:14:37

学习C++

2019-11-15 13:10:17

潘石屹Python语言

2012-04-11 09:19:08

Haskell编程

2015-05-25 15:31:56

C语言学习和使用 C 语言

2017-04-05 16:40:45

2021-01-26 05:37:08

分库分表内存

2014-05-30 15:56:26

iOS 8WWDC2014

2021-05-17 08:20:22

职场晋升转型

2017-11-21 14:41:29

编程语言Python

2021-03-26 10:04:38

数据结构技术

2017-04-05 18:10:05

R语言开发Ross

2021-06-21 10:04:12

微软密码Arsenault

2023-12-08 10:59:49

2015-02-26 09:41:50

2016-08-22 13:31:05

前端架构前后端分离

2022-01-19 22:51:57

设计匿名用户

2016-09-27 21:25:08

Go语言Ken Thompso

2020-10-14 08:33:23

Prometheus监控体系

2019-07-30 15:50:00

点赞
收藏

51CTO技术栈公众号