当前位置:首页 C++ > 正文

C 与 C++ 各个版本演进全梳理

作者:野牛程序员:2026-01-29 12:47:35 C++阅读 1993
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 的主要改进

  • 引入完整且统一的标准库

  • 支持函数原型,允许在声明中指定参数类型

  • 新增关键字:constvolatilesigned

  • 增加宽字符、宽字符串、多字节字符支持

  • 改进预处理指令

  • 强化类型检查规则,消除大量语义歧义

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::array

  • std::forward_list

  • std::unordered_map

  • std::unordered_set

多线程支持
  • std::thread

  • std::atomic

  • std::condition_variable

智能指针
  • std::shared_ptr

  • std::weak_ptr

其它重要特性
  • std::function

  • std::bind

  • Lambda 表达式


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 之后,两者在并发模型与语法设计上逐步靠近


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • C 与 C++ 各个版本演进全梳理
  • 相关推荐

    最新推荐

    热门点击