C 语言的发展方向
20世纪80年代初,C 在 UNIX系统的小型机世界中已经是主导语言了,从那时开始,它已经扩展到个人 计算机 和大型机, 大部分软件开发商公司都选用了 C 语言来开发其子处理程序,电子表格软件,编译器等等。因为他们知道,C 可以产生紧凑而高效的程序。更重要的是,他们知道这些程序易于修改而且易于适应新的计算机模式。
对于公司和熟悉 C 语言的人有帮助的东西,对其他用户同样有帮助。越来越多的计算机用户已转身使用 C 以便利用其优点。不一定非得是计算机专业人员才能使用 C。
而到了20世纪90年代,许多软件开发商开始转身使用 C++ 语言来进行大的编程项目。C++向 C 语言嫁接了面向对象编程工具(面向对象编程是一种哲学思想,它试图让语言来适应问题,而不是让问题来适应语言)。C++差不多是 C 的一个超集,意味着任何 C 程序都同时是,或差不多是一个有效的 C++程序。通过学习 C,你能够更容易的接受 C++的许多知识。
不管 C++ 和 Java 这样较新的语言如何流行,C 在软件产业中仍然是一种重要的技能,在最想获得的技能中,它一般都列在前10名。特别是在嵌入式系统的编程中,C也补课或缺。也就是说,它将用来为汽车,照相机,DVD播放器和其他现代化设备中逐渐普及的微处理器编程。同样,C 已开始进入长期以来一直属于 FORTRAN 的科学编程领域。最后,由于它是一种适合用来开发操作系统的语言,C 在 Linux 的开发中也扮演着重要的角色。即使到现在,C 仍将保持强劲的势头。
简而言之,C 是最重要的编程语言之一,并将继续如此,如果你想找一份编程的工作,则首先你所不能缺失的一种能力就是C的使用。
计算机工作的基本原理
计算机
如果你打算学习如何使用 C语言来进行编程,你就必须要了解计算机工作原理方面的一些知识。这些知识会帮助你更好的理解使用 C语言 编写程序与运行该程序时最终会发生的事情之间的联系。
现在的计算机可分为几个部件。中央处理单元( CPU )担负着绝大部分的计算工作,随机访问 存储器 ( RAM )作为一个工作区来保存程序和文件;永久 存储 器,一般是硬盘,即使在计算机关机时也能记下程序和文件;还有各种外部输入输出设备(如键盘,鼠标,打印机)用来提供人与计算机之间的通信。CPU负责处理程序,所以我们集中来讨论它的功能。
CPU
CPU 的工作非常简单,至少在我们所了解的情况中是这样的。它从内存中获取一个指令并执行这条指令,然后从内存中获取下一个指令并执行它,周而复始。一个千兆 CPU 可以在一秒种内进行大约一亿次这样的操作,所以 CPU 能以惊人的速度来从事极其枯燥的工作,如果用人力来执行,可能会使一个人精神崩溃。CPU 有自己的小工作区,该工作区由若干个 寄存器 组成,每个寄存器可以保存一个数。一个寄存器保存下一条指令的内存地址,CPU 使用该信息获取下一条指令。获取一条指令后,CPU 在另一个寄存器中保存该指令并将第一个寄存器的值更新为下一条指令的地址。CPU 只能理解有限的指令(指令集)。还有,这些指令是相当具体的,其中许多指令要求计算机将一个数从一个位置移动到另一个位置,例如,从内存单元移到寄存器。
这段说明有两个有趣的地方。首先,存储在计算机中的一切内容都是数字。数字是以数字形式存储 的, 字符 也是以数字形式存储的,每个字符有一个数字代码(ASCII)。计算机装载到寄存器的指令是以数字形式存储的,指令集中的每条指令具有一个数字代码。其次,计算机程序最终必须以这种数字指令代码(或称为机器语言)来表示。
了解了计算机运行方式之后:如果你希望计算机帮你做某件事,就必须提供一个特定的指令列表,确切地告诉计算机要做的事及如何去做,计算机是死的,他只会按照你的命令去做事。你必须以一种计算机可以直接理解的语言(机器语言)来创建该程序。这是一项繁琐,乏味,费力的任务。即使将两个想回这样简单的事也必须被分解成若干个步骤:
1 将内存单元为2000中的数字复制到寄存器1.
2 将内存单元为2004中的数字复制到寄存器2.
3 将寄存器2的内容加到寄存器1的内容,答案保留在寄存器1中。
4 将寄存器1的内容复制到内存单元2008.
而且你必须用数字代码来表示这些指令中的每一个!
如果你喜欢以这种方式编写程序,抱歉,机器语言编程的时代已经过去很久了。
而如果你还是想要学习编程,那么你可以学习高级编程语言。
高级计算机语言和编译器
如 C语言 这样的高级编程语言,可以从几个方面简化你的编程过程。首先,你不必用数字代码即ASCII来表示指令。其次,你所使用的指令更接近你考虑问题的方式,而非接近计算机使用的详细操作步骤。现在你不用再考虑特定 CPU 实现特定任务所必须采取的精确步骤,而是可以在更抽象的层次上表达你的意图。
例如,要对两个数求和 a+b=c,你可以编写下列内容:
c = a + b;
看到这样的代码,即使你没学过编程,你也能大概的知道它所表达的意思。但如果看到用数字代码表示的由若干条指令组成的机器语言等价代码,则不会让人这么明白。
比如这样的一段汇编代码,:
mov ax,1
mov bx,2
add ax,bx
mov cx,ax
mov ax,4c00h
同样是a+b=c,事实上如果没有专门的学习过,我完全不理解它所表达的是什么意思。
不幸的是,计算机对于我们来说则正好相反。对计算机来说,高级指令是完全不能理解的胡言乱语。因而才有了 编译器 的出现。编译器是将高级语言程序翻译成计算机所能理解的详细机器语言指令集的程序。分工合作,我们只需要进行高级思考,余下的交给编译器来完成就好可以了。
常用的编译器
简单的说,高级语言(如C,Java 和 C++)都以更抽象的方式即我们人的思维来实现代码。同样,高级语言相较于机器语言来说更容易学习,同时用高级语言编写程序比用机器语言来说,代码量更少,更容易。