C Primer Plus 第五版复习---第一章

第一章 概览

1.C的历史和特性

 1.1.C语言的起源
  贝尔实验室的Dennis Ritchie在1972年开发了C,当时他正与Ken Thompson一起设计UNIX操作系统,然而C并不是全由Ritchie构想出来的,它来自Thompson的B语言,C是作为从事实际编程工作的程序员的一种工具而出现的,所以其目标是成为一种有用的语言,多数语言都以实用为目标,但是他们也往往会考虑其它方面,比如Pascal的主要目标是为学习良好的编程原则提供一个扎实的基础,而BASIC则是模仿英语,以便让不熟悉计算机的学生能够轻松的学会这种语言,这些目标很重要,但它们并不总是与实际的使用需要相符。而C则是为了编程人员开发的语言。

 1.2.使用C语言的理由
 1.2.1.设计特性
  C是一种融合了控制特性的现代语言,控制特性是很重要的,其设计使得用户可以自然地采用自顶而下的规划、结构化的编程,以及模块化的设计。

在这里插入图片描述

 1.2.2.高效性
  C程序往往很紧凑且运行速度快,C可以表现出通常只有汇编才具有的精细控制能力(汇编语言是特定的CPU设计所采用的一组内部指令的助记符,不同的CPU类型使用不同的汇编语言)。

 1.2.3.可移植性
  在一个系统上编写的C程序经过很少改动或不经修改就可以在其他系统上运行,不过通常程序中为访问特定硬件设备(例如LCD)或操作系统(如windows XP或者OS X)的特殊功能而专门编写的部分,通常是不能移植的。

 1.2.4.强大的功能和灵活性
  C强大而又灵活,例如UNIX操作系统的大部分便是用C编写的,其他语言(如FORTRAN、Perl、Python等)的许多编译器和解释器也都是用C编写的。

 1.2.5.面向编程人员
  C面向编程人员的需要,它允许你访问硬件,并可以操作内存中特定位。它具有丰富的运算符供选择,让你可以简单的表达自己的意图。这种灵活性是优点,同时也是一种危险,优点在于:许多任务(转换数据形式)在C中都简单很多。危险在于:使用C是,你可能会犯在使用其他一些语言时不可能犯的错位。C给予你更多的自由,但同时也让你承担更大的风险。另外多说C实现都有一个大型的库,其中包含有用的C函数,这些函数能够处理编程人员通常会面对的许多需求。

 1.2.6.缺点
  C在表达方面的自由会增加风险,尤其是C对指针的使用,意味着你可能会犯非常难以追踪的编程错误,自由的代价是永远的警惕。C的简洁性与其丰富的运算符相结合,使其可能写出非常难理解代码,比如一年一度的“含糊代码”(Obfuscated Code)竞赛。

 1.3.C语言的发展方向
  面向对象编程是一种哲学思想,它试图让语言来适应问题,而不是让问题来适应语言,C++差不多是C的一个超集,意味着任何C程序都同时是,或差不多是一个有效的C++程序,通过学习C,你还可以学到C++的许多知识。

 1.4.计算机工作的基本原理
  现在计算机可以分为几个部件,CPU担负着绝大部分的计算工作;随机访问存储器(RAM)作为一个工作区来保存程序和文件;永久存储器,一般是硬盘,即使在计算机关机时也能记下程序和文件;还有各种外设用来提供人和计算机之间的通信。
  CPU的工作非常简单,它从内存中获取一个指令并执行该指令,然后从内存中获取下一个指令并执行,CPU有自己的小工作区,该工作区是由若干个寄存器(registers)组成,每个寄存器可以保存一个数。一个寄存器保存下一条指令的内存地址,CPU使用该信息获取下一条指令,获取一条指令后,CPU在另一个寄存器中保存该指令并将第一个寄存器的值更新为下一条指令的地址。
  计算机装载到寄存器的指令是以数字的形式存储的,指令集的每条指令都具有一个特殊的数字代码,计算机程序最终必须以这种数字指令代码来表示,因此如果你希望计算机做某事,就必须提供一个特定的指令列表(一套程序)确切的告诉计算机要做的事以及如何去做。

 1.5.高级计算机语言和编译器
  如C这样的高级编程语言,可以从几个方面简化你的编程过程,首先你不必用数字代码表示指令,你所使用的指令更接近你考虑问题的方式。编译器是将高级语言程序解释成计算机所需的详细机器语言指令集的程序,你进行高级思考,编译器则负责乏味的琐碎工作。每种计算机在设计上都有其自身特有的机器语言,你可以将编译器匹配为一种特定的机器语言,这样,使用正确的编译器或者编译器集,你就可以将同一高级语言程序转换为各种不同的机器语言程序。

2.编写程序所需要的步骤

 2.1.使用C语言的7个步骤

1.定义程序目标
2.设计程序
3.编写代码
4.编译
5.运行程序
6.测试和调试程序
7.维护和修改程序

 2.1.1.定义程序目标
  考虑程序需要的信息、程序需要进行的计算和操作,以及程序应该向您报告的信息,用一般概念来考虑问题,先不需要用具体的计算机语言来考虑。

 2.1.2.设计程序
  在对程序应该完成的事情有了一个概念性认识后,就可以决定程序该如何完成,用户界面是什么样子,程序应该如何组织,目标用户是谁,要花多长时间来完成;还需要确定在程序中如何表示数据,以及用什么方法来处理数据。选择一个好的方式来表示信息通常可以使程序设计和数据处理容易很多。强调一下,应该用一般的概念来考虑问题,而不是具体的代码。

 2.1.3.编写代码
  切记养成添加注释的习惯,以及养成良好的编码规范。

 2.1.4.编译
  编译的细节取决于编程环境,编译器是一个程序,其工作是将源代码转换为可执行代码,可执行代码是用计算机的本机语言或机器语言表示的代码,这种语言是由数字代码表示的详细指令组成,C编译器用来将C语言转换成特定的机器语言,C编译器还会从C库中向最终程序添加代码,更准确的说,是被称为链接器(linker)的程序将库例程引入,最后行成一个包含计算机可以理解的代码并且你可以运行的可执行文件。

 2.1.5.运行程序
  

 2.1.6.测试和调试程序
  在将所学知识应用到编程中时,做好自己很容易犯错的准备,当你的本领越高,代表你的犯错越不容易被察觉,因此一定要养成良好的编码规范以及流程图。

 2.1.7.维护和修改程序
  如果对程序做了清楚的文字注释,并采取良好的设计,则所有的这些任务都会大大简化。因此在编写代码前,使用古老的笔记技术来略记程序的目标,并勾勒出设计概貌,或者进行流程图的编写,这样最终会节省很多时间。

3.关于编译器和链接器的一些知识

  MS-DOS系统中,要求文件名不能大于8个字符厂,一些UNIX系统对整个文件名长度包括扩展名在内,有14个字符长度的限制,其他UNIX系统允许更长的名字,最长255个字符,Linux、Window和Macintosh OS也允许长文件名。
 3.1.目标代码文件、可执行文件和库
  C编程的基本策略是使用程序将源代码文件转换为可执行文件,此文件包含可以运行的机器语言代码。C分两步完成这一工作:编译和连接。编译器将源代码转换为中间代码,链接器将此中间代码与其他代码相结合来生成可执行文件。C使用被划分为两部分的这一方法使程序便于模块化。你可以分辨编译各个模块,然后用链接器将编译过的模块结合起来,同时链接器还会将你的程序与预编译的库代码结合起来。
  中间文件的形式有多种选择,一般是将源代码转换为机器语言代码,将结果放置在一个目标代码文件中,目标代码文件所缺少的第一个元素是一个叫启动代码(start-up code)的东西,此代码相当于你的程序和操作系统之间的接口,不同的机器,启动代码有可能会不一样,因此需要选择特定的编译器,或者在编译器中选择特定的机器;所缺少的第二个元素是库例程代码,所有的C程序都利用标准C库中所包含的例程,例如printf(),这些例程代码实际存储在另一个叫做库的文件中,库文件有许多例程函数的实现代码。
  链接器的作用是将这三个元素(目标代码、系统的标准启动代码和库代码)结合起来,并将它们存放在单个文件即可执行文件中。目标文件和可执行文件都是由机器语言指令组成,但是目标文件只包含你所编写的代码转换成的机器语言,而可执行文件还包含了你所使用的库例程以及启动代码的机器代码。

4.C的标准

  C没有官方的标准,不过Brian Kernighan和Dennis Ritchie编写的The C Programming Language成为大家接受的标准,通常称为经典C或K&R C。在1983年,美国国家标准化组织(ANSI)设立了一个委员会(X3J11)以发展一个新的标准,这个新的标准(ANSI C)定义了语言和一个标准C库,国际标准阻住1990年采用了一个C标准(ISO C),ISO C和ANSI C实质上是同一个标准,它们的最终版本被称为C89或C90,该委员会有一些指导原则,最有趣的是:保持C的精神,提出了以下思想:

  • 相信程序员;
  • 不妨碍程序员所需要完成的事情;
  • 让语言保持短小简单;
  • 只提供一种方法来执行一个操作;
  • 使程序运行速度快,即使不能保证其可移植性;

  1994年开始,修订标准工作开始,这一努力工作产生了C99标准,保持C标准的最初原则,包括保持语言短小而简单,第一,支持国际化编程,提供了处理国际字符集的方法;第二,整理现有的惯例以解决明显的缺点;第三,针对科学和工程项目的重要数学计算改进C的适用能力。结果C99的修改保持了C的本质特性,C继续是一种简短、清楚、高效的语言。

5.复习题

 Qustion 1.就编程而言,可移植性表示什么?
 Answer:可移植性代表着程序的通用性。

 Qustion 2.解释源代码文件、目标代码文件和可执行文件之间的区别。
 Answer:源代码文件经过编译生成目标代码文件,链接器把目标代码文件、标准启动代码、库代码链接一起生成可执行文件。

 Qustion 3.编程的7个步骤是什么?
 Answer:定义程序目标 --> 设计程序 --> 编写代码 --> 编译 --> 运行程序 --> 测试和调试程序 -->维护和修改程序

 Qustion 4.编译器的任务是什么?
 Answer:编译器的作用是把源代码转化为机器代码,

 Qustion 5.链接器的任务是什么?
 Answer:把多个文件,比如已编译的源代码文件、库代码、启动代码链接生成一个单独的可执行程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值