C89 和 C99 标准的区别

此文档列出 C89 和 C99 两个标准的主要区别。

1、C99 新增特性

内容
说明
单杠注释
支持 // 注释(C89只支持 / /)
变量声明位置
允许在代码块中任意位置声明变量(C89要求在所有执行语句之前声明变量)
布尔类型
引入 _Bool 类型和 新增 stdbool.h 头文件
长整型扩展
新增 long long intstdint.h 头文件
复数支持:
新增 _Complexcomplex.h 头文件

2、数组增强

  1. 变长数组,数组长度可以用运行时表达式定义。
  2. 结构体/数组成员初始化,支持指定初始化列表,如: struct point p1 = { .x = 1, .y = 2 };

3、 函数改进

  1. 内联函数,支持 inline 关键字。
  2. 受限指针,引入 restrict 关键字优化指针别名。

4、语法和库扩展

  1. 复合字面量,如: (struct point) {.x = 1, .y = 2}
  2. 数学函数更新,如 增加 sqrtf()函数。(单精度版本)