C99
来自cppreference.com
< c
ISO/IEC 9899:1999,又称 C99,是先前的 C 标准版本。
| 本节未完成 原因:core/library features, TC1~TC3, DRs |
过时
已移除
- 声明中的隐式
int - 隐式函数声明
已摒弃
- gets()
新的语言功能特性
- 标识符中的通用字符名
- 增加翻译限制
//注释- restrict 指针
- 增强的算术类型
_Boollong long和unsigned long long- 扩展整数类型
- _Complex 类型 (
float _Complex、double _Complex和long double _Complex) - _Imaginary 类型 (
float _Imaginary、double _Imaginary和long double _Imaginary)
- 灵便的数组成员
- 可变长度数组 (VLA) 类型和依变量更改 (VM) 类型
- 改进 数组、结构体和联合体 类型的 花括号初始化列表
- 非常量初始化式
- 指派初始化式
- 幂等 cvr 限定符
- 枚举符列表 中的末尾逗号
- 十六进制浮点常量
- 复合字面量
- 浮点环境
- 规定有符号整数类型除法进行截断
main()函数 中的隐式return 0;- 声明和语句混合顺序
- for 循环中的 初始化语句
- inline 函数
- 预定义变量 __func__
- 函数声明内的
[]的 cvr 限定符和static - 变参宏
- _Pragma 预处理运算符
- 浮点求值的标准 pragma
STDCFENV_ACCESSSTDCFP_CONTRACTSTDCCX_LIMITED_RANGE
针对可选功能特性的功能特性测试宏
- __STDC_IEC_559__
- 指定支持 IEEE-754 二进制浮点算术和所需的数学函数。
- __STDC_IEC_559_COMPLEX__
- 指定支持 IEEE-754 复数算术和所需的数学函数。
- __STDC_HOSTED__
- 指定该实现为宿主式。
- __STDC_ISO_10646__
- 指定宽字面量编码中使用 Unicode,并扩展到所支持的最新修订版本。
- __STDC_MB_MIGHT_NEQ_WC__
- 指定基本字符集中的一些字符具有与普通和宽字面量编码中不同的代码单元值。
新的库功能特性
新的头文件
程序库功能特性
- 整数类型的别名
- 具有精确宽度的整数类型 (
intN_t和uintN_t) - 至少具有给定宽度的最快整数类型 (
int_fastN_t和uint_fastN_t) - 至少具有给定宽度的最小整数类型 (
int_leastN_t和uint_leastN_t) - 可用于对象指针之间转换的整数类型 (intptr_t 和 uintptr_t)
- 具有最大宽度的整数类型 (intmax_t 和 uintmax_t)
- 具有精确宽度的整数类型 (
long long和 intmax_t 的运算- llabs()
- abs
- div
- div
- 访问浮点环境
- 扩充的浮点数学函数
- 新的浮点数学函数
- 现存和新浮点数学函数的 -
f和 -l变体 - 数学错误处理
- 复数函数
- _Exit()
- 针对
long long、unsigned long long、intmax_t 和 uintmax_t 的格式化支持- atoll()
- strtoimax()
- strtoll()
- strtoull
- strtoumax()
- wcstoimax()
- wcstoll()
- wcstoull()
- wcstoumax()
- isblank() 和 iswblank()
- snprintf() 和 vsnprintf()
- vfscanf() 和 vfwscanf() 函数族
- 对 fscanf() 和 fprintf() 函数族的扩展
- 针对
long long和unsigned long long的长度修饰符ll - 针对
signed char和unsigned char的长度修饰符hh - 针对
double的长度修饰符l - 针对 size_t 及其有符号版本的长度修饰符
z - 针对 ptrdiff_t 及其无符号版本的长度修饰符
t - 针对 intmax_t 和 uintmax_t 的长度修饰符
j - 针对浮点类型的转换修饰符
a
- 针对
- 针对
long long和unsigned long long的数值限制宏 - 对应于现存和新的整数类型别名的数值限制宏
- 针对整数类型的格式化字符串宏
- va_copy
- 泛型数学宏
- 浮点比较宏
- 浮点分类宏
- 针对
_Bool的兼容性宏 (bool、true 和 false)
缺陷报告
Template:c/language/history/DR99
编译器支持
C99 核心语言特性
| 本节未完成 原因:需要列出 C 编译器,并验证 |
| C99 功能特性 |
提案 |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
Cray |
|
|---|---|---|---|---|---|---|---|---|---|---|---|
| 标识符中的通用字符名 | 3.1 | 是 | 是 | ||||||||
| 提高翻译极限 | N590 | 0.9 | 不适用 | ||||||||
// 注释
|
N644 | 2.7 | 是 | 是 | |||||||
| restrict 指针 | N448 | 2.95 | 是 | 部分* | |||||||
| 增强算术类型 | N815 N601 N620 N638 N657 N694 N809 |
是 | 部分 | 可能 | |||||||
| 灵活的数组成员 | 3.0 | 是 | 是 | ||||||||
| 变长数组 (VLA) 类型 | N683 | 0.9 | 是 | ||||||||
| 可变修改 (VM) 类型 | N2778 | 不适用 | 是 | ||||||||
| 定名初始化式 | N494 | 3.0 | 是 | 是 | |||||||
| 非常量初始化式 | 1.21 | 不适用 | |||||||||
| 幂等 cvr 限定符 | N505 | 3.0 | 不适用 | ||||||||
| 枚举项列表 中的尾部逗号 | 0.9 | 是 | 是 | ||||||||
| 十六进制浮点数常量 | N308 | 2.8 | 是 | 是 | |||||||
| 复合字面量 | N716 | 3.1 | 是 | 是 | |||||||
| 浮点数环境 | 部分 | 部分 | |||||||||
| 规定有符号整数类型的除法进行截断 | N617 | 0.9 | 不适用 | ||||||||
main() 函数中的隐式 return 0;
|
是 | 是 | 是 | ||||||||
| 混合安排声明和语句 | N740 | 3.0 | 是 | 是 | |||||||
| for 循环中的 初始化语句 | 是 | 是 | 是 | ||||||||
| inline 函数 | N741 | 4.3 | 是 | 是 | |||||||
| 预定义变量 __func__ | N611 | 2.95 | 是 | 是 | |||||||
函数声明中的 [] 之中的 cvr 限定符和 static
|
3.1 | 是 | |||||||||
| 变参宏 | N707 | 2.95 | 是 | 是 | |||||||
| _Pragma 预处理器运算符 | N634 | 3.0 | 是 | 部分* | |||||||
| 浮点数求值的标准语用(pragma) | N631 N696 |
否 | 否 | ||||||||
| C99 功能特性 |
提案 |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
Cray |