C Primer Plus 笔记第一章

1 C语言的起源

1972年,贝尔实验室的丹尼斯·里奇(Dennis Ritch)和肯·汤普逊(Ken Thompson)在开发UNIX操作系统时设计了C语言。C语言是在B语言的基础上进行设计。C语言设计的初衷是将其作为程序员使用的一种编程工具。

2 选择C语言的理由

1.更易懂、可靠

2.高效性

3.可移植性

4.强大而灵活

5.面向程序员(即C语言设计的初衷)

3 C语言应用范围

UNIX操作系统、计算机游戏、嵌入式系统、机器人工厂、星球大战电影、PC应用、计算机语言、卢卡斯公司(其中卢卡斯公司和星球大战特指C语言在计算机图像和特技上的应用)

4 计算机能做什么

首先需要知道计算机怎么工作?

现代的计算机由多种部件构成:中央处理单元(CPU)承担绝大部分的运算工作。随机存取内存(RAM)是存储程序和文件的工作区;而永久内存存储设备(过去一般指机械硬盘,现在还包括固态硬盘)即使在关闭计算机后,也不会丢失之前存储的程序和文件。另外,还有各种外围设备(如,键盘、鼠标、触摸屏、监视器)提供人与计算机之间的交互。CPU负责处理程序

CPU工作原理

CPU的工作就是从内存中获取并执行一条指令,然后再从内存中获取并执行下一条指令,诸如此类,但他的速度是惊人的,一个吉赫兹的CPU一秒钟能重复这样的操作大约十亿次。

CPU由若干个寄存器组成,每个寄存器都可以存储一个数字。一个寄存器存储下一条指令的内存地址,CPU使用该地址来获取和更新下一条指令。在获取指令后,CPU在另一个寄存器中存储该指令,并更新第1个寄存器存储下一条指令的地址。

下面介绍两个有趣的知识。

其一,存储在计算机中的所有内容都是数字。计算机以数字形式存储数字和字符(如,在文本文档中使用的字母)。每个字符都有一个数字码。计算机载入寄存器的指令也以数字形式存储,指令集中的每条指令都有一个数字码。

其二,计算机程序最终必须以数字指令码(即,机器语言)来表示。

简而言之,计算机的工作原理是:如果希望计算机做某些事,就必须为其提供特殊的指令列表(程序),确切地告诉计算机要做的事以及如何做。你必须用计算机能直接明白的语言(机器语言)创建程序。

5 高级计算机语言和编译器

高级计算机语言不同于机器语言,更贴近于你如何想这个问题,而不用考虑计算机中繁琐的步骤,程序员可以以更抽象的方式描述行为,不受限于特定CPU或指令集,也更加容易理解和掌握,提高开发效率。但是对计算机恰恰相反,计算机只能理解机器语言,因此在高级语言与计算机之间,还需要一个能够将高级语言翻译为机器语言的编译器,程序员进行高级思维活动,而编译器则负责处理冗长乏味的细节工作。

6 语言标准

1978年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)合著的The C Programming Language(《C语言程序设计》)第1版是公认的C标准,通常称之为K&R C或经典C

随着C的发展壮大,需要更全面,新颖的标准,1989年,美国国家标准协会(ANSI)公布了一个新的标准,该标准(ANSI C)定义了C语言和C标准库。由于ANSI先公布C标准,因此业界人士通常使用ANSI C

1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准,委员会的用意不是在C语言中添加新特性,而是为了达到新的目标。第1个目标是,支持国际化编程。第2个目标是,“调整现有实践致力于解决明显的缺陷”。第3个目标是,为适应科学和工程项目中的关键数值计算,提高C的适应性,让C比FORTRAN更有竞争力。

维护标准任重道远。标准委员会2011年终于发布了C11标准。此次,委员会提出了一些新的指导原则。出于对当前编程安全的担忧,不那么强调“信任程序员”目标了。另外需要强调的是,修订标准的原因不是因为原标准不能用,而是需要跟进新的技术。例如,新标准添加了可选项支持当前使用多处理器的计算机

7 使用C语言的七个步骤

  • 定义程序的目标
  • 设计程序
  • 编写代码
  • 编译
  • 运行代码
  • 测试和调试程序
  • 维护和修改程序

8 编程机制

用C语言编写程序时,编写的内容被存储在文本文件中,该文件被称为源代码文件(source code file)。大部分C系统,包括之前提到的,都要求文件名以.c结尾(如,wordcount.c和budget.c)。在文件名中,点号(.)前面的部分称为基本名(basename),点号后面的部分称为扩展名(extension)。因此,budget是基本名,c是扩展名。基本名与扩展名的组合(budget.c)就是文件名。

目标代码文件、可执行文件和库

C编程的基本策略是,用程序把源代码文件转换为可执行文件(其中包含可直接运行的机器语言代码)。典型的C实现通过编译和链接两个步骤来完成这一过程。编译器把源代码转换成中间代码,链接器把中间代码和其他代码合并,生成可执行文件。

中间文件有多种形式。我们在这里描述的是最普遍的一种形式,即把源代码转换为机器语言代码,并把结果放在目标代码文件(或简称目标文件)中(这里假设源代码只有一个文件)。虽然目标文件中包含机器语言代码,但是并不能直接运行该文件。因为目标文件中存储的是编译器翻译的源代码,这还不是一个完整的程序。

目标代码文件缺失启动代码(startup code)。启动代码充当着程序和操作系统之间的接口。目标代码还缺少库函数。几乎所有的C程序都要使用C标准库中的函数。例如常用的printf()函数。

链接器的作用是,把你编写的目标代码、系统的标准启动代码和库代码这3部分合并成一个文件,即可执行文件。对于库代码,链接器只会把程序中要用到的库函数代码提取出来

9 复习题

  1. 对编程而言,可移植性意味着什么?
  2. 解释源代码文件、目标代码文件和可执行文件有什么区别?
  3. 编程的7个主要步骤是什么?
  4. 编译器的任务是什么?
  5. 链接器的任务是什么?

10 编程练习

尚未要求编写C代码,该练习侧重于编程过程的早期步骤。

你刚被MacroMuscle有限公司聘用。该公司准备进入欧洲市场,需要一个把英寸单位转换为厘米单位(1英寸=2.54厘米)的程序。该程序要提示用户输入英寸值。你的任务是定义程序目标和设计程序(编程过程的第1步和第2步)。

11 答案

复习题:

  1. 完美的可移植程序是,其源代码无需修改就能在不同计算机系统中成功编译的程序。
  2. 源代码文件包含程序员使用的任何编程语言编写的代码。目标代码文件包含机器语言代码,它不必是完整的程序代码。可执行文件包含组成可执行程序的完整机器语言代码。
  3. (1)定义程序目标;(2)设计程序;(3)编写程序;(4)编译程序;(5)运行程序;(6)测试和调试程序;(7)维护和修改程序。
  4. 编译器把源代码(如,用C语言编写的代码)翻译成等价的机器语言代码(也叫作目标代码)。
  5. 链接器把编译器翻译好的源代码以及库代码和启动代码组合起来,生成一个可执行程序。
  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值