C与C++
本节阅读量:C语言
C语言于1972年由Dennis Ritchie在贝尔实验室发明。C语言设计初衷是为了编写操作系统。
设计目标是:
- 容易编译
- 高效访问内存
- 产出高质量的机器语言
- 跨平台,不依赖特定的操作系统或硬件平台
由于C语言灵活及高效的优点,在1973年,Ritchie和Ken Thompson使用C语言重写了Unix操作系统。 在此之前,大部分操作系统都使用汇编语言编写。C语言的跨平台的特性,使得Unix很容易编译到不同种类的计算机上,被广泛使用。 从此C语言和Unix及后续类Unix操作系统紧密绑定。使C语言广为流行。
1978年,Brian Kernighan与Dennis Ritchie合著了《The C Programming Language》,书中介绍的C语言成为后来广泛使用的标准C基础。这本书也被称为"K&R",以两位作者名作缩写。目前大量C语言程序设计的教材和专著均以此书为蓝本。人们熟知的“Hello, World”程序就是由《The C Programming Language》首次引入,现在,这一程序已成为所有程序设计语言入门第一课。 在当时,如果程序需要良好的可移植性,要遵循"K&R"中推荐的编程写法,大部分的编译器采用"K&R"作为规范。
随着计算机日益普及,出现许多不同的C语言版本。由于没有统一规范,这些C语言出现了不一致的地方。1983年,美国国家标准协会(ANSI)委任委员会 X3J11 对C语言进行标准化。 经过艰苦努力,新标准于1989年12月14日正式被批准为ANSI X3.159-1989 并于 1990 年春天颁布。因为该标准是1989年发布的,所以一般简称为C89标准,人们也称其为“ANSI C”。 目前C语言的编译器都支持C89标准,编写的程序只有符合该标准,才能获得最好的可移植性。
在1999年,ANSI委员会发布了新的C语言规范版本C99。C99囊括一些编译器已实现的语言扩展,或在C++语言中的一些特性。
C++
C++,读作「C plus plus」。20世纪70年代中期,Bjarne Stroustrup在剑桥大学计算机中心工作。他希望开发一个既编程简单、正确可靠,又运行高效、可移植的计算机程序设计语言。以C语言为背景,以Simula思想为基础的语言,正好符合他的初衷和设想。
1979年,Bjarne Stroustrup来到贝尔实验室,开始从事将C改良为支持面向对象编程的C 「C with classes」的工作。 1983年,该语言被正式命名为C++。 相较C语言,C++引入大量新特性,基本认为C++是C的超集(少部分C99特性不被C++支持)。
1998年,ISO(International Standards Organization)国际标准化组织完成了C++标准化工作。 在2003年,对C++98版本的漏洞部分修改,这就是C++ 03标准。
此后,C++语言的标准有C++11,C++14,C++17及C++20。 C++11为C++加入大量新特征,使C++看起来似乎像一门新的编程语言。 C++11目前也是当前的语言基线版本。 C++语言标准委员会每3年发布一版新的C++新标准,不过编译器一般不支持最新标准的全部特性。 发布新标准的年份会作为标准的名称,例如没有C++16,因为2016年没有发布新的C++标准。
C/C++编程哲学
C/C++选择「相信程序员」。 这意味着,有极大的自由做任何你想做的操作。 也意味着,它不阻止你做傻事。
「使用C语言很容易开枪打自己的脚,而使用C++则会直接轰飞整条腿」
有许多新手C++程序员容易踩的坑。 因此,知道什么不能做在编写C++中很重要。
Q: C++擅长用来做哪些领域的编程?
C++非常擅长编写高性能程序。常见的使用C++进行开发领域:
- 游戏引擎
- 数据库
- 服务器后端开发
- 网络软件
- 音视频,文字图像处理软件
- 高性能的金融应用
- 嵌入式系统中的应用
- 科学计算
- 人工智能
Q: 学习C++前是否需要学习C语言?
不需要。本教程会讲解所需了解的一切。
当学会C++时,学习C语言将会十分容易。目前,C语言基本用来编写操作系统,嵌入式系统软件,或作为不同编程语言之间交互的接口。 多数情况下,更推荐使用C++。
