读《TCPL》- 介绍

来源:互联网 发布:大数据方向什么专业 编辑:程序博客网 时间:2024/05/11 14:16

2016.06.14 – 06.16
个人英文阅读练习笔记(低水准)。

06.14
介绍
C是一种通用的编程语言。在开发UNIX系统时,C就跟其有很近的关联,因为UNIX系统和运行在UNIX系统上的大多数程序都是用C编写的。然而,C语言并不是只适用于某种操作系统或机器;并且,因为C常用作编写编译器和操作系统,而被称为“系统编程语言”,C也同样适用于在许多不同领域中编写主要的程序。[C用途]

C语言的许多方面的创意都来自BCPL(由Martin Richards开发)。BCPL对C的影响是间接通过B语言(是Ken Thompson在1970年为DEC PDP-7上的UNIX系统所开发的)进行的。[C起源]

BCPL和B语言都是“无类型”语言。相反,C提供了多种数据类型。其中,基本类型包括字符型、整型以及几种不同大小的浮点类型。另外,还有几种衍生的数据类型,它们是指针、数组、结构体以及联合。表达式由操作数和操作符组成;包含赋值或函数调用的表达式称为语句。指针提供基于机器的地址计算。[C 类型]

C提供了可用于编写良好的结构化程序的基本的控制流结构:复合语句,判断语句(if-else),选择其中的一种情形(switch),终止条件在顶部(while,for)或底部(do)的循环以及提前退出循环(break)。[C控制流]

函数可以返回基本类型、结构体、联合或指责类型的值。任何函数都可以被递归调用。局部变量是典型的“自动的”,或在每次调用时创建一个新的局部变量。函数不可以嵌套定义,变量可以在块结构中声明。C程序中存在于独立文件中的函数会被独立地被编译。变量可以在函数内部(只在函数内部可用)或外部(整个文件或整个C程序中可见)。[C 函数]

预处理包括宏、包含其它的源文件以及条件编译。

C是一种相对“低级”的语言。该“低级”这并不是贬低C语言之意;它意味着C能用相同的对象处理大多数计算所做的,即字符、数值以及地址。这些操作可能被机器用合并和移位的算术和逻辑运算实现。

06.16
C没有提供对诸如字符串、集合、列表以及数组等复合对象的直接操作。尽管结构体可作为一个单元进行复制,但C并没有操作整个数组或字符串的操作。除了静态定义和函数中的局部变量提供的堆栈外,C没有定义任何的存储分配机制;并没有对堆和垃圾数据回收的机制。C自身也未提供输入输出机制;其中并没有读或写的语句,且没有内建的文件访问方法。所有这些更高级别的机制都必须由明确地函数调用来实现。大多数C实现都包含了像这样函数的标准集。

C只提供了简单的、单线程的控制流:测试、循环、复合语句以及子程序,但没有多道程序设计、并行操作、异步或协同操作。
C中这些特性的缺少似乎是重大缺陷(“您的意思是比较两个字符串还得调用一个函数?”),但保持语言大小低到合适的尺度真的有好处。因为C是相对小的语言,它可以在一个小空间内被描述,并且能快速的学会它。一个程序员可以合适的了解、理解并实用该C语言。[C特性]

多年来,对C的定义都是“C编程语言(第一版本)”参考手册。在1983年,美国国家标准学会(ANSI)成立了委员会,用以提供现代的、易于理解的C语言的定义。ANSI标准最终的定义(“ANSI C”)在1988年得以完成。该标准的大多数特性已被现代的编译器所支持。

该标准基于原始的参考手册。C语言被略微的修改了一些;标准其中的一个目标是确保大多数已存在的程序依旧有效,若有违背标准的地方,编译器将产生相应的警告。

对于大多数程序员,最重要的改变时函数的声明和定义的语法。现在的函数声明可以包含对函数参数的描述;函数的定义和声明要相匹配。这点额外的信息让编译器检查参数不匹配的错误更加容易;以我们的经验,这是C 语言非常有用的一个补充。
除此之外,还有一些其它小规模的改变。结构体赋值和枚举已正式成为C语言的一部分,且已被广泛应用。浮点运算能以单精度的形式完成计算。明确定义算术运算的特性,尤其是无符号类型的运算特性。预处理变得更加复杂。C语言中这些大多数的改变对程序员的编程来说都仅只是轻微的影响。

标准另一个有意义的贡献是定义了补充到C语言中的库。它指定了访问操作系统的函数(如读/写文件)、格式化输入输出、内存分配、字符串操作等等。标准头文件集提供了对函数和数据类型的统一访问形式。这就确保了使用这个库与宿主系统进行交互时程序之间具有兼容的行为。库的大部分跟UNIX系统上的“标准I/O库”的模型相近。该库在第一个版本中有描述,且在其它系统上也被广泛的使用。且,大多数程序员都不会看到太大的改变。

由于大多数计算机都直接支持由C语言提供的数据类型和控制结构,所以用来实现每个独立程序的运行时库是微小的。标准库函数需要被明确地调用,所以当有的函数不需要时可以避免被包含在程序中。大多数可以用C编写的,除了专家们在操作系统程序中所隐藏的细节外,都是可移植的。

尽管C符合许多计算机的性能,但它是独立于任何特殊机器的架构的。无需对具体计算机细节关心太多就可以写出可移植的程序,也就是说,这些程序可以运行在多种计算机硬件上。标准使得可移植问题变得明确,可以指定一些列的常量来标识程序是运行到哪一种特定的机器之上。[C标准]

C不是一种强类型语言,但随着它的演化,它的类型检查已经得到了加强。C的原始定义不允许,但允许指针和整数之间的交换;这已被消除了很长时间,现在的标准需要恰当的声明和编译器所强制的精确的转换。新函数声明是这个方向的另一步。编译器将会对大多数的类型错误给出警告,并会对不兼容的数据类型进行自动转换。然而,C仍旧保持着基本的哲学思想 —— 程序员需要知道他们在做什么;它只需要程序员精确的表达他们的目的。[C转换]

C,跟其它的编程语言一样,也有缺陷。一些运算符拥有错误的优先级;某些语法还应更好一些。然而,C是一门在多种应用编程中被证明的极具高效和表达的语言。[C优缺点]

本书的内容组织如下。第一章是关于C核心部分的一个教程。其目的是让读者尽可能快的入门,因为我们强烈相信学习一门新语言的方式是用该语言来编写程序。该教程假设读者具有编程的基本素养;其中不包含对计算机、编译器或像n = n + 1表达式的解释。尽管其中包含了一些有用的编程技巧,但本书的目的不是为了涉及数据结构和算法的知识;若当遇到这样的程序时,我们应该选择集中精力到语言的学习上。

第二章到第六章以更细节、更正式(相比第一章)的方式讨论C的各个方面,仍旧以完整的程序例子来讲解,而不是以程序片段的方式。第二章主要讲解基本的数据类型、运算符和表达式。第三种主要讲解控制流:if-else,switch,while,for等。第四章讲解函数和编程结构 —— 外部变量、作用域规则、多个源文件等,并会涉及预处理。第五章将讨论指针和地址运算。第六章讲解结构和联合。

第七章讨论标准库,它为操作系统提供了一个通用的接口。该库有ANSI标准定义且意味着能被所有支持C的机器所支持,所以程序用该库中的相应的函数来进行输入、输出以及其它的对操作系统的访问,并且这些C语言程序无需修改就可以运行到另外一个系统之上。

第八章描述了C程序和UNIX系统之间的接口,主要集中在输入/输出、文件系统以及存储分配。尽管该章节是特定于UNIX系统的,使用其它系统的程序员也能从该章中学习到一些有用的知识,包括一个版本的标准库是怎么实现的以及对移植性的建议。

附录A包含了语言参考手册。C的语法和语义的正式声明是ANSI标准。该文档,是编译器编写者最重要的编写指南。这些参考手册没有用默守陈规方式而更简明地传达了语言的定义。附录B是对标准库的一个汇总,它是呈现给用户看的而非给库的实现者看的。附录C是从原始C语言开始的一些变化的总结。然而,若有疑问或不一致的地方,标准和特定的编译器才是最终的权威。

[2016.06.14 - 22:54]

0 0
原创粉丝点击