跳转到正文

C89 / C90:标准化基线 ​

C89 指 ANSI X3.159-1989,C90 指随后发布的 ISO/IEC 9899:1990。两者描述的核心语言基本相同:前者建立 ANSI 标准,后者把它纳入国际标准体系。因此工程中通常把它们视为同一代 C。

参考官方标准:WG14 · C 项目与里程碑

这一代解决了什么 ​

  • 统一此前不同编译器之间分散的“K&R C”实践。
  • 引入可检查参数类型的函数原型。
  • 建立标准头文件和标准库接口。
  • 明确 void、const、volatile、signed 等类型与限定符。
  • 形成预处理、翻译单元和链接规则的共同基线。

函数原型 ​

c
#include <stdio.h>

int add(int left, int right);

int main(void) {
    printf("%d\n", add(20, 22));
    return 0;
}

int add(int left, int right) {
    return left + right;
}

函数原型让编译器在调用点检查参数数量和类型。int main(void) 中的 void 明确表示“不接收参数”,这与旧式未指定参数列表的声明不同。

编写兼容代码时的限制 ​

C90 要求变量声明位于代码块语句之前,也没有 // 单行注释、指定初始化器或 for 循环中的局部声明:

c
int sum_values(const int *values, int count) {
    int index;
    int total = 0;

    for (index = 0; index < count; ++index) {
        total += values[index];
    }
    return total;
}

1995 年的 C95 是 C90 的增补修订,重点增加宽字符与多字节字符等国际化支持,通常不单独作为一代语言学习。

下一版:C99。

版本信息与迁移 ​

  • 发布时间 / 标准时间: 1989 年(ANSI C),1990 年成为 ISO 标准
  • 维护状态: 截至 2026-08-27,以页面所链接的官方生命周期或规范状态为准
  • 运行时或平台基线: 编译器对目标 ISO C/C++ 标准及所用标准库的实现支持

迁移影响: 升级构建标准前,必须在全部目标编译器上开启对应 -std= 选项,处理被收紧或删除的语法、标准库差异和 ABI 边界,并保留旧工具链回归构建。

版本确认 ​

bash
gcc --version
clang --version

资料核对日期:2026-08-27。

Released under the MIT License.