C 与 C++ 各个版本演进全梳理
C 与 C++ 作为系统级与通用编程领域的核心语言,其标准演进过程本身就是计算机发展史的重要组成部分。以下内容按照时间顺序,对 C 与 C++ 各主要版本进行系统梳理。
一、C 语言各版本说明
1. C 语言的早期起源
C 语言最早由 丹尼斯·里奇(Dennis Ritchie) 设计,用于在 PDP-11 计算机上运行 Unix 操作系统。
1969—1973 年:C 语言逐步成型
PDP-11 出现后,Dennis Ritchie 与 肯·汤普逊(Ken Thompson) 合作,将 Unix 移植到该平台
1973 年:Unix 内核正式改用 C 语言重写,这是 C 语言首次用于操作系统核心开发
1975 年:C 语言开始向其他硬件平台移植
史蒂芬·强生(Stephen C. Johnson) 实现“可移植编译器”,推动 C 语言跨平台发展
C 语言由此确立了“高效、贴近硬件、可移植”的核心特性。
2. K&R C(1978)
1978 年,Dennis Ritchie 与 Brian Kernighan 合作出版《The C Programming Language》第一版。
该书定义的 C 语言版本被称为 K&R C
这是第一个被广泛接受的 C 语言描述标准
当时尚未形成正式的国际标准
K&R C 奠定了现代 C 语言的基本语法结构。
3. C89 / C90(ANSI C)
标准化背景
1989 年:美国国家标准协会(ANSI)发布 C 语言标准,称为 C89
1990 年:国际标准化组织(ISO)在 ANSI C 的基础上制定 ISO 9899:1990,称为 C90
两者内容基本一致,仅存在少量文字级调整
C89 与 C90 本质上是同一个标准,只是发布机构不同。
相较 K&R C 的主要改进
引入完整且统一的标准库
支持函数原型,允许在声明中指定参数类型
新增关键字:
const、volatile、signed增加宽字符、宽字符串、多字节字符支持
改进预处理指令
强化类型检查规则,消除大量语义歧义
C89/C90 标志着 C 语言进入工业级规范时代。
4. C99(ISO 9899:1999)
1994 年:开始制定新标准
1999 年:C99 正式发布
2000 年:被 ANSI 采纳
C99 的代表性新特性
不定长数组(VLA)
int n;int a[n];
变量声明不再必须放在语句块开头
for循环支持局部变量声明for (int i = 0; i < 100; ++i)
复合字面量(类似 C++ 构造方式)
(struct Point){1, 2}新增预定义宏
__func__取消函数默认返回
int的旧规则新增布尔类型、复数类型头文件
扩展
struct tm,引入struct tmx
C99 在实用性和表达能力上有明显提升。
5. C11(ISO 9899:2011)
2011 年 12 月 8 日 正式发布
早期代号为 C1X
核心改进方向
提高与 C++ 的兼容性
引入多线程支持
支持泛型宏(_Generic)
增加带边界检查的安全函数
支持匿名结构体与联合体
C11 使 C 语言在并发与安全性方面迈出关键一步。
6. C18(ISO 9899:2018)
未引入新的语言特性
主要作用是 修复 C11 中的缺陷与歧义
可视为 C11 的维护版本
二、C++ 各版本说明
1. C++ 标准化背景
1998 年:C++ 首次成为 ISO 标准(C++98)
2003 年:C++03 发布,属于小幅修订
此后大致每 3~5 年更新一次标准
2. C++11(ISO/IEC 14882:2011)
早期草案名称:C++0x
2011 年正式通过
被普遍认为是 C++ 历史上最重要的一次升级
部分核心新特性
auto 关键字(全新语义)
C++98 中
auto表示存储期C++11 中用于 类型自动推导
auto x = 10;
nullptr
解决 NULL 在函数重载中的二义性问题。
void foo(int);void foo(void*);foo(nullptr); // 精确匹配指针版本
范围 for 循环
for (auto x : container) { }STL 新组件
std::arraystd::forward_liststd::unordered_mapstd::unordered_set
多线程支持
std::threadstd::atomicstd::condition_variable
智能指针
std::shared_ptrstd::weak_ptr
其它重要特性
std::functionstd::bindLambda 表达式
3. C++14(ISO/IEC 14882:2014)
2014 年 8 月 18 日 通过
定位为 C++11 的增强与修复版本
改进模板推导、Lambda 使用体验
修复大量标准缺陷
4. C++17(ISO/IEC 14882:2017)
非正式代号:C++1z
在 C++11 基础上进一步简化语言使用
核心目标
减少样板代码
提升日常开发效率
增强标准库实用性
C++17 被认为是继 C++11 之后又一次重要里程碑。
三、小结
C 语言:以稳定、可移植、贴近硬件著称,标准更新节奏较慢
C++ 语言:持续演进,强调抽象能力、泛型、并发与现代工程实践
C11 与 C++11 之后,两者在并发模型与语法设计上逐步靠近

- 上一篇:C++98 vs C++11 语法特性对照表(示例版)
- 下一篇:c++运算符优先级
