August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
经典C有两个主要后代:ISO C和ISO C++。多年以来,两种语言在以不同的步调,沿着不同的方向发展着。造成的一个结果就是它们都支持传统C风格编程,但支持的方式有着细微不同。所产生的不兼容会使某些人非常苦恼——同时使用C和C++的人、使用一种语言编写程序但用到另一种语言编写的库的人以及为C和C++编写库和工具的人。
我为何会说C和C++是兄弟呢?毕竟C++很明显是C的后代。但是,请看下面简化后的家谱。
在此图中,实线表示大量特性的继承,短杠虚线表示主要特性的借用,而点虚线表示次要特性的借用。从中可以看出,ISO C和ISO C++是K&R C[Kernighan,1978]的两个主要后代,因此它们是兄弟。两者的发展过程中都从经典C继承了关键特性,但又都不是100%兼容经典C。“经典C”一词是我从Dennis Ritchie的显示器上贴的便条中挑出来的。它大致相当于K&R C加上枚举和struct赋值两个特性。BCPL是在[Richards,1980]中定义的,C89是在[C90]中定义的。
注意,C和C++的差别并不一定是C++演化过程中对C特性做出改变的结果。有很多不兼容的例子是在将C++中已存在很久的特性引入C时产生的。例如,T*到void*的赋值以及全局const的链接[Stroustrup,2002]。有时,一个特性都已经成为ISO C++标准的一部分,才被引入C并产生了不兼容,例如inline的含义。
Read now
Unlock full access