1.2 C语言和C++语言简介

C语言是贝尔实验室丹尼斯·M.里奇(Dennis M. Ritchie, 1941—2011)在1973年设计的一种程序设计语言,当时想用于编写UNIX操作系统和相关的系统程序。20世纪70年代后,C语言作为UNIX系统的标准开发语言,随着UNIX系统的流行而被广泛接受和应用。20世纪80年代后,C语言被移植到包括大型机、工作站等在内的各种系统上,逐渐成为开发计算机系统程序和复杂软件的一种通用语言。随着微型计算机(简称“微机”)的蓬勃发展、处理能力的提高和应用的日益广泛,越来越多的人参与到微机应用系统的开发工作中,需要适合开发系统软件和应用软件的语言。C语言能较好地满足需求,因此被广泛用于开发微机上的各种软件系统。

1978年,布莱恩·W.克尼汉(Brian W. Kernighan)和丹尼斯·M.里奇合作出版了The C Programming Language一书,书中介绍的C语言被称为“K&R C”。随着应用的发展,美国国家标准局(ANSI)在20世纪80年代成立了专门的小组研究C语言标准化问题,这项工作的结果是1989年颁布的ANSI C标准。该标准被国际标准化组织和各国标准化机构接受,也被采纳为中国国家标准。此后人们继续工作,1999年通过了ISO/IEC 9899:1999标准(通常称为C99),该标准对ANSI C标准做了一些修订和扩充。近年通过的ISO/IEC 9899:2011标准(通常称为C11)对C语言做了进一步的修订和扩充。

C++语言的诞生应归功于本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup),其设计基础是两种语言:C和Simula。Stroustrup于20世纪80年代到贝尔实验室的计算科学研究中心工作,他希望能有一种既具有C语言的效率和灵活性,又有类似于Simula语言的高级抽象描述机制的语言,更好地帮助从事复杂系统开发的程序员(包括自己)进行工作。在计算科学研究中心其他同事的参与和帮助下,最终推动了C++语言在1983年诞生。

由于C++能满足许多研究工作和实际软件开发的需要,因此很快在研究机构和产业界流行起来。Stroustrup在1985年出版了The C++Programming Language一书,标志着C++语言发展的第一个阶段完成。此后C++不断发展演化,1998年年底通过了第一个正式的C++标准(称为C++98),后来的C++03标准是在C++98基础上的一次小修订,C++11标准则是一次全面的大进化。

C++语言中的两个“+”号,最初是表示它在两个方面对C语言进行增强和发展:

(1)在面向过程的程序设计(Procedure Oriented Programming)[1]方面进行了扩充和延伸;

(2)增加了面向对象的程序设计(Object-Oriented Programming)[2]功能。

随着时代的发展,C++的功能被进一步扩充。就像经典书籍Effective C++所说的,当今的C++应该被视为一个庞大的“语言联邦”。除了包含面向过程的程序设计和面向对象的程序设计之外,C++至少还包含如下几个重要的组成部分:

(1)泛型程序设计(Generic Programming);

(2)元程序设计(Meta-Programming);

(3)函数式程序设计(Functional Programming);

(4)标准模板库(Standard Template Library, STL);

(5)C11扩充的并发编程(Concurrent Programming)功能。

因此可以说,C++已经脱离了C语言,只是在“面向过程的程序设计”方面,C++是C语言的扩充和发展,并且与C语言向后兼容,即两者的结构和机制(包括但不限于基本数据类型、变量、运算符、表达式、语句、判断、循环、函数、指针、结构体等)几乎完全重合。

由于C++语言基本上兼容C语言,相关程序开发系统常常同时支持这两个语言,在这个意义上,人们常用“C/C++”来指代两者的并集(请读者注意,并不存在一种名叫“C/C++”的语言)。例如,微机上有许多商业化的C/C++语言系统可用,它们同时支持C和C++语言程序开发。早期有Borland公司的C/C++系列产品,后来有Microsoft(微软)公司的Visual C/C++系列开发工具。还有许多免费的C/C++语言系统,如本书中介绍的Dev-C++。目前各种工作站和大型计算机系统大都运行UNIX或Linux操作系统,C/C++是它们的标准系统开发语言,这些系统上也有一些可用的C/C++系统。

无论C还是C++语言,都有很丰富的内容,精通它们需要经过较长时间的学习和较多的实践锻炼。由于一门课程和一本教科书的容量限制,同时考虑到初学者学习的便利性,以及与后续课程衔接的基本需要,本书中的讲解和编程示例的描述将主要使用从ANSI C标准语言和C++语言中精选的一组共性功能,加上少许C99和C++中面向过程的程序设计方面的增强和扩充功能。这样选择可以帮助初学者比较容易地进入编程和计算的领域。本书后面简单地说“语言”或“编程语言”时就指这样的“C/C++”语言,说“程序”时就指用这种语言写的程序。此外,书中的讨论将限制在面向过程的程序设计的范围内,不涉及高级的面向对象的程序设计。这些也是本书的书名“C/C++程序设计”的由来。

在本书的学习过程中,希望读者注重学习计算领域的重要概念、程序设计的基本思想、编程的技术和方法、编程语言的相关知识,还需要认真学习和灵活运用人们在长期程序设计工作中总结出的经验,以及许多情况下的具体程序写法(所谓习惯用法)、程序书写的形式等。对阅读本书的读者提出的建议是:在学习过程中,需要熟悉程序语言和程序设计方法,自己动手完成尽可能多的程序练习,还要特别注意学习如何写程序,养成良好的程序设计习惯。这些都是学习程序语言与程序设计过程中特别重要的方面。本书中还提出了很多有用的建议,希望读者注意参考。