C 语言简介

https://www.runoob.com/cprogramming/c-environment-setup.html

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管 C 语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的 C 语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称 MCU)以及超级电脑等作业平台。二十世纪八十年代,为了避免各开发厂商用的 C 语言语法产生差异,由美国国家标准局为 C 语言订定了一套完整的国际标准语法,称为 ANSI C,作为 C 语言最初的标准。

C 语言的诞生

C语言之父——丹尼斯·里奇(Dennis Ritchie)。

丹尼斯·里奇在贝尔实验室工作时参与了 Multics 项目,开发一个前所未有的、可以多人使用的、同时运行多个程序的操作系统。该项目由贝尔实验室、麻省理工学院和通用电气公司三方联合研制,但是由于设计过于复杂,1969 年贝尔实验室宣布退出。随后,丹尼斯·里奇和肯·汤普森一同开发了 Unix 操作系统,吸取了 Multics 设计复杂而导致失败的教训,丹尼斯·里奇将 Unix 的设计原则定为“Keep it simple, stupid”(保持简单和直接),即 KISS 原则。为了做到这一点,Unix 由许多小程序组成,每个小程序只能完成一个功能,任何复杂的操作都必须分解成一些基本步骤,由这些小程序逐一完成,再组合起来得到最终结果。

  • S1:小程序1
  • S2:小程序2
  • S3:小程序1
  • S4:小程序3

Unix 一开始是使用不通用的机器语言编写的,如果更换一台计算机,就必须重新编写。为了提高通用性和开发效率,丹尼斯·里奇发明了一种新的计算机语言,就是现在的 C 语言。

最初的 Unix 内核使用汇编语言编写,之后他们很快决定要用一种高级语言,让他们更好的驾驭操作系统中的复杂数据。1970 年左右,他们尝试使用 Fortran 语言,不过没有达到预期目标。

BCPL 语言->B 语言->C 语言

Basic Combined Programming Language(BCPL),1967 年由剑桥大学 Matin Richards 在同样由剑桥大学开发的 CPL 语言上改进而来。BCPL 语言最早被用做牛津大学的 OS6 操作系统上面的开发工具。后来通过美国贝尔实验室的改进和推广成为了 Unix 上的常用开发语言。

BCPL 语言有些类似于 Fortran 语言,也是典型的面向过程的高级语言。BCPL 的语法更加靠近机器本身,适合于开发精巧,高要求的应用程序,同时对编译器的要求也不高。BCPL 语言也是最早使用库函数封装基本输入输出的语言之一,这使得跨平台的移植性很好。BCPL 语言的代码用小写字母书写,有别于同时代的 BASIC 和 PASCAL 语言。BCPL 语言对于字符串的支持很差,这种缺点一直延续到它的后代中,BCPL 语言的内存管理也很糟糕,不过幸好在它的后代中这个缺点被改掉了。BCPL 语言编写的程序从一个主函数中开始,功能模块可以添加在各个函数中,函数支持嵌套和递归。

BCPL 语言本身并没有被使用太长时间,这是因为它的继任者实在太强。1970 年,贝尔实验室的 Ken Thompson 在 BCPL 语言的基础上改进出了 B 语言,用于书写 Unix。这个名字取自 BCPL 中的第一个字母。

B 语言是一种无类型语言,所有的数据都和机器指令(操作码+操作数)相对应,并且程序员可以直接通过内存地址操作内存。B 语言的无类型特性使得其在 PDP-11 机器上无法以比较简洁的方式访问字符类型,因而从 1971 年开始,Dennis Ritchie 开始对 B 语言进行改造,其中最重要的是引入了数据类型的概念,这些改造最终使 B 语言演化为了计算机发展历史上最为重要的编程语言—— C 语言。

B 语言使用的时间更短,因为三年后的 1973 年同样是贝尔实验室的 D.M.RITCHIE 将 B 语言进一步改进,并且取了 BCPL 中的第二个字母将其命名为 C 语言。

BCPL 语言范例:

						
GET "libhdr"
GLOBAL { count:200; all:201 }
LET try(ld, row, rd) BE TEST row=all
THEN count := count + 1
ELSE { LET poss = all & ~(ld | row | rd)
UNTIL poss=0 DO
{ LET p = poss & -poss
poss := poss - p
try(ld+p << 1, row+p, rd+p >> 1)
}
}
LET start() = VALOF
{ all := 1
FOR i = 1 TO 12 DO
{ count := 0
try(0, 0, 0)
writef("Number of solutions to %i2-queens is %i5*n", i, count)
all := 2*all + 1
}
RESULTIS 0
}
						
					

接着,在肯·汤普森创立的 B 语言(Basic Combined Programming Language, BCPL 语言)基础上,丹尼斯·里奇提出了一门新语言——C 语言。

B 语言是一种解释性语言——意味着它由一个运行于 CPU 之上的中间件解释执行——而 C 却是一门编译语言。它被翻译成机器代码,在 CPU 上直接执行。即便如此,C 当时被认为是一门高级语言。C 语言提供了丹尼斯·里奇和肯·汤普森想要的灵活性,却也很快。

C语言的第一个版本和现在的样子相差不太多,相对简单点。它可以自定义数据结构和类型并声明变量,丹尼斯·里奇和肯·汤普森就是用它编写了 Unix 新内核。“他们发明了 C 来开发程序”,十年之后加入贝尔实验室的派克说,“而那个程序就是 Unix 内核。”

派克说:“当你在编写一个大型程序,比如 Unix,你必须管理好各种各样模块之间的交互:所有用户、文件系统、磁盘、程序执行等等。而有效的管理则需要良好的数据表示,这就是所谓的数据结构。在没有数据结构组织的情况下,编写一个与 Unix 一样一致和优雅的内核基本上是不可能的。需要一个机制组织好数据,而 Fortran 却不擅长于此”。正如派克指出的那样,C 语言内置的数据结构后来发展出面向对象范式,被现代编程语言如 C++ 和 Java 大量采用。

C 语言达到了完美的平衡,让你在较高层次高效率开发的同时,却不失去对每处细节的控制”,NVIDIA 和贝尔的首席科学家兼斯坦福大学工程系教授 Bill Dally 说。

C 语言也贯彻了“保持简单和直接”的原则,语法非常简洁,对使用者的限制很少。丹尼斯·里奇和布莱恩·克尼汉(Brian W.Kernighan)编写的教材《C 程序设计语言》总共只有 100 多页。

Unix 迅速在程序员中流传,到了 80 年代,已经成为主流操作系统,演变成整个软件工业的基础,当代最主要的操作系统 Windows、MacOS、iOS 和 Linux 都与 Unix 有关。丹尼斯·里奇对计算机影响深远。

C 程序设计语言最早是由 Dennis Ritchie 于 1973 年设计并实现的。从那时开始,C 语言从其位于贝尔实验室的发源地传播到世界各地。C 语言已经成为全球程序员的公共语言,并由此诞生了两个新的主流语言 C++ 与 Java —— 它们都建立在 C 语言的语法和基本结构的基础之上。现在世界上的许多软件都是在 C 语言及其衍生的各种语言的基础之上开发出来的。

C 语言的传播需要我们对语言加以完整的描述,并适应它在使用过程中所进行的一些变化。1988 年,美国国家标准协会(ANSI)为 C 语言制定了一个精准的标准,该标准保持了 C 的表达能力、效率、小规模以及对机器的最终控制,同时还保证符合标准的程序可以从一种计算机与操作系统移植到另一种计算机与操作系统而无须改变。这个标准同时也被国际标准化组织(ISO)接受为国际标准,使世界各地的用户都受益。

标准委员会考虑到 C 语言在多民族使用的情况,在语言本身以及库中都提供了对“宽字符”的支持,这是以中文以及其他不使用罗马字符集的语言来表示文本所需要的。

除了这些渐进的变化外,C 仍保持着它原来的样子 —— 适用于各种背景的程序员的一种紧凑而有效的工具。

C 程序设计语言最早是由 Dennis Ritchie 于1973年设计并实现的。从那时开始,C 语言从其位于贝尔实验室的发源地传播到世界各地。它已经成为全球程序员的公共语言,并由此诞生了两个新的主流语言 C++ 与 Java —— 它们都建立在 C 语言的语法和基本结构的基础上。现在世界上的许多软件都是在 C 语言及其衍生的各种语言的基础上开发出来的。

C 语言的传播需要我们对语言加以完整的描述,并适应它在使用过程中所进行的一些变化。1988年,美国国家标准协会(ANSI)为 C 语言制定了一个精确的标准,该标准保持了 C 语言的表达能力、效率、小规模以及对机器的最终控制,同时还保证符合标准的程序可以从一种计算机与操作系统移植到另一种计算机与操作系统而无须改变。这个标准同时也被国际标准化组织(ISO)接受为国际标准。

C 语言特点

关于 C 语言:

  • C 语言是为了编写 UNIX 操作系统而被发明的。
  • C 语言是以 B 语言为基础的,B 语言大概是在 1970 年被引进的。
  • C 语言标准是于 1988 年由美国国家标准协会(ANSI,全称 American National Standard Institute)制定的。
  • 截至 1973 年,UNIX 操作系统完全使用 C 语言编写。
  • 目前,C 语言是最广泛使用的系统程序设计语言。
  • 大多数先进的软件都是使用 C 语言实现的。
  • Linux 操作系统和 RDBMS(Relational Database Management System,关系数据库管理系统) MySQL 都是使用 C 语言编写的。

C 语言最初是用于系统开发工作,特别是组成操作系统的程序。由于 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样,所以采用 C 语言作为系统开发语言。下面列举几个使用 C 的实例:

  • 操作系统
  • 语言编译器
  • 汇编器
  • 文本编辑器
  • 打印机
  • 网络驱动器
  • 现代程序
  • 数据库
  • 语言解释器

C 语言是一种通用的程序设计语言,其特点包括简洁的表达式、流行的控制流和数据结构、丰富的运算符集等。C 语言不是一种“很高级”的语言,也不“庞大”,并且不专用于某个特定的应用领域。但是,C 语言的限制很少,通用性强,这使得它比一些公认为功能强大的语言使用更方便、效率更高。

C 语言的很多重要概念来源于由 Martin Richards 开发的 BCPL 语言。BCPL 语言对 C 语言的影响间接来自于 B 语言,它是 Ken Thompson 为第一个 UNIX 系统而于 1970 年在 DEC PDP-7 计算机上开发的。

BCPL 语言和 B 语言都是“无类型”的语言。相比较而言,C 语言提供了很多数据类型:

  • C 语言的基本类型包括字符、具有多种长度的整型和浮点数等。
  • 另外,还有通过指针、数组、结构和联合派生的各种数据类型。
  • 表达式由运算符和操作数组成。任何一个表达式,包括赋值表达式或函数调用表达式,都可以是一个语句。
  • 指针提供了与具体机器无关的地址算术运算。

C 语言为实现结构良好的程序提供了基本的控制流结构:语句组、条件判断(if-else)、多路选择(switch)、终止测试在顶部的循环(while、for)、终止测试在底部的循环(do)、提前跳出循环(break)等。

函数可以返回基本类型、结构、联合或指针类型的值。任何函数都可以递归调用。局部变量通常是“自动的”,即在每次函数调用时重新创建。函数定义可以不是嵌套的,

C 语言与 UNIX

C 语言与 UNIX 系统之间具有非常密切的联系 —— C 语言是在 UNIX 系统上开发的。

C 语言最初是由 Dennis Ritchie 为 UNIX 操作系统设计的,并在 DEC PDP-11 计算机上实现。UNIX 操作系统、C 编译器和几乎所有的 UNIX 应用程序都是用 C 语言编写的。

C 语言并不受限于任何一种操作系统或机器。由于它很适合用来编写编译器和操作系统,因此被称为“系统编程语言”,但它同样适合于编写不同领域中的大多数程序。

C 语言开发环境

C 语言开发环境:C 语言文本编辑器 和 C 语言编译器。

C 语言文本编辑器

C 语言编译器