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。