C-Primer-Plus-第一章-初识C语言

第一章 初识C语言

参考书籍:C Primer Plus(第6版)中文版

一、前言

打算跟这本书系统地学习一遍C语言,谨以此系列文章记录自己的学习之路。本文所有图片均来源于此书。

二、主要内容

1. C语言起源

1972年,美国贝尔实验室的丹尼斯·里奇(Dennis Ritch )和肯·汤普逊(Ken Thompson )在开发UNIX操作系统时设计了C语言,C语言是在B语言(汤普逊发明)的基础上进行设计。

2. C语言优点

  • 高效性:C语言具有通常是汇编语言才具有的微调控制能力,可以根据具体情况微调程序(即根据具体平台)以获得最大运行速度或最有效地使用内存。
  • 可移植性:从8位微处理器到克雷超级计算机,许多计算机体系结构都可以使用C编译器。
  • 面向程序员:程序员利用C可以访问硬件、操控内存中的位。C语言有丰富的运算符,能让程序员简洁地表达自己的意图。C语言在提供更多自由的同时,也让使用者承担了更大的责任。

3. C语言缺点

想拥有自由就必须时刻保持警惕要享受用C语言自由编程的乐趣,就必须承担更多的责任。

  • 特别是,C语言使用指针,而涉及指针的编程错误往往难以察觉。
  • C语言紧凑简洁,结合了大量的运算符。正因如此,我们也可以编写出让人极其费解的代码。

4. C语言应用范围

早在20世纪80年代,C语言就已经成为小型计算机(UNIX系统)使用的主流语言。从那以后,C语言的应用范围扩展到微型机(个人计算机)和大型机(庞然大物)。

特别是,C语言已成为嵌入式系统编程的流行语言。也就是说,越来越多的汽车、照相机、DVD播放机和其他现代化设备的微处理器都用C语言进行编程。

C++在C语言的基础上嫁接了面向对象编程工具(面向对象编程 是一门哲学,它通过对语言建模来适应问题,而不是对问题建模以适应语言

5. 计算机能做什么

现代的计算机由多种部件构成。中央处理单元 (CPU)承担绝大部分的运算工作。随机存取内存 (RAM)是存储程序和文件的工作区;而永久内存存储设备(过去一般指机械硬盘,现在还包括固态硬盘)即使在关闭计算机后,也不会丢失之前储存的程序和文件。

CPU的工作非常简单,至少从以下简短的描述中看是这样。它从内存中获取并执行一条指令,然后再从内存中获取并执行下一条指令。

CPU有自己的小工作区—— 由若干个寄存器 组成,每个寄存器都可以储存一个数字。一个寄存器储存下一条指令的内存地址,CPU使用该地址来获取和更新下一条指令。在获取指令后,CPU在另一个寄存器中储存该指令,并更新第1个寄存器储存下一条指令的地址。CPU能理解的指令有限(这些指令的集合叫作指令集 )。而且,这些指令相当具体,其中的许多指令都是用于请求计算机把一个数字从一个位置移动到另一个位置。例如,从内存移动到寄存器。

6. 高级计算机语言和编译器

高级编程语言(如,C)以多种方式简化了编程工作。使用高级编程语言,可以在更抽象的层面表达你的想法,不用考虑CPU在完成任务时具体需要哪些步骤。

编译器是把高级语言程序翻译成计算机能理解的机器语言指令集的程序。

7. C 语言标准

  • C89/C90/ANSI C

    • 美国国家标准协会(ANSI)于1983年组建了一个委员会(X3J11),开发了一套新标准,并于1989年正式公布。该标准(ANSI C)定义了C语言和C标准库。国际标准化组织于1990年采用了这套C标准(ISO C)。ISO C和ANSI C是完全相同的标准。
    • ANSI/ISO标准的最终版本通常叫作C89 (因为ANSI于1989年批准该标准)或C90 (因为ISO于1990年批准该标准)。另外,由于ANSI先公布C标准,因此业界人士通常使用ANSI C。

    在该委员会制定的指导原则中,最有趣的可能是:保持C的精神。委员会在表述这一精神时列出了以下几点:

    • 信任程序员;
    • 不要妨碍程序员做需要做的事;
    • 保持语言精练简单;
    • 只提供一种方法执行一项操作;
    • 让程序运行更快,即使不能保证其可移植性。
  • C99

    • 1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准。
    • 第1个目标是,支持国际化编程。例如,提供多种方法处理国际字符集。
    • 第2个目标是,“调整现有实践致力于解决明显的缺陷”。
    • 第3个目标是,为适应科学和工程项目中的关键数值计算,提高C的适应性,让C比FORTRAN更有竞争力。
  • C11

    • 标准委员会在2007年承诺C标准的下一个版本是C1X,2011年终于发布了C11标准。
    • 出于对当前编程安全的担忧,不那么强调“信任程序员”目标了。
    • 而且,供应商并未像对C90那样很好地接受和支持C99。这使得C99的一些特性成为C11的可选项。

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

C是编译型语言。编写C程序的过程通常有7个步骤(也是比较通用的程序设计步骤)。

编程的7个步骤
  • 定义程序的目标
    • 想要程序去做什么首先自己要明确自己想做什么,思考你的程序需要哪些信息,要进行哪些计算和控制,以及程序应该要报告什么信息。
  • 设计程序
    • 虑如何用程序来完成任务。例如,用户界面应该是怎样的?如何组织程序?目标用户是谁?准备花多长时间来完成这个程序?
    • 还要决定在程序(还可能是辅助文件)中如何表示数据,以及用什么方法处理数据。
    • 通常,选择一个合适的方式表示信息可以更容易地设计程序和处理数据。
  • 编写代码
    • 把你设计的程序翻译成C语言。
    • 一般而言,使用文本编辑器创建源代码 文件。该文件中内容就是你翻译的C语言代码。
  • 编译
    • 编译器是把源代码转换成可执行代码的程序。C编译器负责把C代码翻译成特定的机器语言。
    • C编译器还将源代码与C库的代码合并成最终的程序(更精确地说,应该是由一个被称为链接器的程序来链接库函数,但是在大多数系统中,编译器运行链接器)。其结果是,生成一个用户可以运行的可执行文件,其中包含着计算机能理解的代码。
    • 编译器还会检查C语言程序是否有效。如果C编译器发现错误,就不生成可执行文件并报错。
  • 运行程序
  • 测试和调试程序
  • 维护和修改代码
  • 说明
    • 编程并非像描述那样是一个线性的过程。有时,要在不同的步骤之间往复。
    • 许多初学者经常忽略第1步和第2步(定义程序目标和设计程序),直接跳到第3步(编写代码)。那些跳过前两个步骤的人往往浪费了更多的时间,因为他们写出的程序难看、缺乏条理、让人难以理解。要编写的程序越大越复杂,事先定义和设计程序环节的工作量就越大。
    • 磨刀不误砍柴工,应该养成先规划再动手编写代码的好习惯,用纸和笔记录下程序的目标和设计框架。这样在编写代码的过程中会更加得心应手、条理清晰。

9. 编程机制

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

  • 目标代码文件
    • C编译器把源代码转换为机器语言代码,并把结果放在目标代码文件 (或简称目标文件 )中。
  • 启动代码
    • 启动代码(startup code)充当着程序和操作系统之间的接口。
  • 库函数
    • 几乎所有的C程序都要使用C标准库中的函数。
编译器和链接器

链接器的作用是,把你编写的目标代码、系统的标准启动代码和库代码这3部分合并成一个文件,即可执行文件。

简而言之,目标文件和可执行文件都由机器语言指令组成的。然而,目标文件中只包含编译器为你编写的代码翻译的机器语言代码,可执行文件中还包含你编写的程序中使用的库函数和启动代码的机器代码。

10. 本章小结

C是强大而简洁的编程语言。它之所以流行,在于自身提供大量的实用编程工具,能很好地控制硬件。而且,与大多数其他程序相比,C程序更容易从一个系统移植到另一个系统。

C是编译型语言。C编译器和链接器是把C语言源代码转换成可执行代码的程序。

用C语言编程可能费力、困难,让你感到沮丧,但是它也可以激发你的兴趣,让你兴奋、满意。我们希望你在愉快的学习过程中爱上C。

posted @ 2022-08-15 20:49  十豆加日月  阅读(173)  评论(0编辑  收藏  举报