输入到计算机内的所有数据和程序最终都将以二进制数的形式来表示。二进制数是基数为2的数,它们是由0和1组成的序列。计算机唯一能识别(并可以执行)的语言叫做机器语言。

汇编语言采用的指令是自然语言的缩写形式,汇编语言指令序列存储在文件中(一种后缀名为.asm的文件),计算机唯一能识别的语言只有机器语言,因此需要将汇编语言转换成机器语言,我们通常采用一种称为汇编器的程序负责将汇编代码编译成指定类型的机器语言。在汇编语言中,能够重用的一段程序被称为子例程。

随着时间的推移,程序变得越来越大、越来越复杂,从头编写代码的代价太高,因此程序语言需要更大的结构来简化程序组织工作,在面向函数语言中,子例程被扩展成了函数或过程。某些技术人员则区别对待函数和过程,他们将能够返回值的过程称为函数。不能够返回值的则称为过程。成功的软件开发人员开始重用已有的函数和过程。

20世纪70年代,Brian Kernigan、Dennis Ritchie及贝尔实验室其他同仁一起发明了C编程语言。C语言最初基于两种语言,一个是Brian Kernigan发明的BCPL语言,一个是Dennis Ritchie发明的B语言。Brian Kernigan、Dennis Ritchie合写了《C语言编程》一书,与这本书定义的规范相兼容的编译器被称为与K&RC兼容。ANSI后创立了一个专门定义C语言规范的小组委员会,与这个小组委员会制定的规范相兼容的编译器称为与ANSI C兼容。任何学习和使用C语言的人都应当使用ANSI C。

在现存这么多编程语言中,为何我们还要学习C语言?因为它是一门效率极高的语言,使用C可以直接对硬件进行编程。C程序运行快,一般来说,只有汇编程序比它快。它的可移植性强(如果一个程序在不同类型计算机或不同操作系统中便于改写使用,那么我们便称此程序是可移植的)。

它是程序员为方便程序员而设计的语言。任何事物有得必有失,当然,它也有缺点。它对程序的结构化不作要求,而结构性高的程序更易于阅读和维护。它可能会造成语义模糊。它是一门对数据类型要求不严格的语言,在编程时,可以从一种类型转换成另一种语言,C语言的设计是基于一个观念:程序员明白自己正在做什么。而JAVA、C#语言,它们是强类型的语言。

函数语言最大的弊端是它不容易像组织程序一样来组织数据,面向函数语言趋向于根据数据处理行为来组织程序。并且它不强制程序员封装或隐藏数据。由于面向函数语言经常导致数据缺乏结构化,而程序的所有部分都能访问到它,因此会存在许多难以察觉的错误。于是,C++、JAVA、C#等面向对象的语言出现了,它们通过组合各种软件对象来创造程序。软件对象是为了封装数据而构造软件的一种方式。软件对象同时定义了可对数据可执行的操作。并用一致的方法定义这些操作。

C++是C语言的对象表达形式,它保留了C语言强大的功能及灵活的特性。同时加入了面向对象语言的可扩展性、维护性、重用性。但是,对象增加的额外开销会导致C++会比C占用更多的内存空间,也会运行的慢一些。

现在,C语言常用来开发硬件驱动程序。硬件驱动程序是植入在硬件内的一段程序代码,驱动程序可以直接访问硬件。并可以用标准的方式和计算机进行通信~