C语言标准ISO/IEC 9899:2011正式版

5星 · 超过95%的资源 需积分: 50 12 下载量 167 浏览量 更新于2024-07-20 2 收藏 2.05MB PDF 举报
"ISO/IEC 9899:2011(E) C99标准的2011年正式版,非草案,清晰文本,非扫描版" ISO/IEC 9899:2011,通常称为C99标准,是C编程语言的一个重要版本,由国际标准化组织(ISO)和国际电工委员会(IEC)在2011年12月15日发布。这个第三版标准是对之前版本的更新,旨在规范和改进C语言的各个方面,以适应不断发展的软件开发需求。 C99标准引入了许多新特性,包括: 1. **类型安全的变长数组(Variable Length Arrays, VLA)**:允许在运行时定义数组的大小,提高了代码的灵活性。 2. **复杂整数类型(Imaginary and Complex numbers)**:为复数运算提供了内置支持。 3. **新的数据类型**:例如`long long int`,提供更大的整数范围;`stdint.h`头文件中的固定宽度整数类型,如`int8_t`,确保跨平台的整数位宽一致性。 4. **增强的字符串处理函数**:如`strncpy()`和`strncat()`增加了可以指定最大复制字符数的功能,提高了安全性。 5. **布尔类型(_Bool)和bool宏**:引入了布尔类型,使得条件表达式更加清晰,与C++的`bool`类似。 6. **内联函数(inline)**:允许编译器优化函数调用,减少函数调用开销。 7. **可选的空字符终止符(null-terminated arrays)**:允许数组不以空字符结尾,如在多维数组中。 8. **新的预处理器宏**:如`__func__`,自动提供当前函数名作为字符串。 9. **设计By-Value参数(Designated Initializers)**:在结构体或联合体初始化时,可以指定成员进行初始化,提高代码可读性。 10. **对齐控制(Alignment Control)**:`_Alignas`关键字和`alignas()`属性允许程序员控制变量的对齐方式。 11. **窄的字符类型(Char16_T, Char32_T)**:为Unicode编码提供支持,特别是在处理UTF-16和UTF-32字符串时。 12. **预处理条件表达式(Conditional Preprocessor Expressions)**:`#if`、`#elif`现在可以使用表达式,而不仅仅是整数值。 13. **对宽字符和宽字符串的改进**:增加了一些处理宽字符和宽字符串的新函数。 C99标准的实施有助于提高代码的效率、安全性和可移植性。它对C语言的改进反映了当时软件开发的最佳实践,并为后来的C11和C18标准奠定了基础。对于任何使用C语言的开发者来说,理解和掌握C99标准是至关重要的。
368 浏览量
2011年12月8日,ISO正式发布了新的C语言的新标准C11,之前被称为C1X,官方名称为ISO/IEC 9899:2011。 新的标准提高了对C++的兼容性,并增加了一些新的特性。这些新特性包括: 对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符, aligned_alloc函数以及<stdalign.h>头文件。 _Noreturn 函数标记,类似于 gcc 的 __attribute__((noreturn))。 _Generic 关键字。 多线程(Multithreading)支持,包括:_Thread_local存储类型标识符,<threads.h>头文件,里面包含了线程的创建和管理函数。 增强的Unicode的支持。基于C Unicode技术报告ISO/IEC TR 19769:2004,增强了对Unicode的支持。包括为UTF-16/UTF-32编码增加了char16_t和char32_t数据类型,提供了包含unicode字符串转换函数的头文件<uchar.h>. 删除了 gets() 函数,使用一个新的更安全的函数gets_s()替代。 增加了边界检查函数接口,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等。 增加了更多浮点处理宏。 匿名结构体/联合体支持。这个在gcc早已存在,C11将其引入标准。 静态断言(Static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理。 新的 fopen() 模式,(“…x”)。类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用。 新增 quick_exit() 函数作为第三种终止程序的方式。当 exit()失败时可以做最少的清理工作。 _Atomic类型修饰符和<stdatomic.h>头文件。