c99和c11之间的差异

I a*_*ame 23 c c99 c11

我正在学习c,现在.我读的这本书是基于C99的.我想在完成本书后将我的知识更新到C11,或者如果存在重大差异则更改资源.因此,我要求的是更新我的知识的解释或资源.我只发现了这个来源.然而,它似乎并不包含我需要或不简洁的信息.

提前致谢.PS:我想学习C11,因为我认为它现在是普遍的标准.如果没有,请通知我.

Evg*_*kan 26

C11标准的良好概述:

该标准包括对C99语言和库规范的若干更改,例如:

  • 对齐规范(_Alignas说明符,_Alignof运算符,aligned_alloc函数,<stdalign.h>头文件)
  • _Noreturn函数说明和<stdnoreturn.h>头文件
  • 使用_Generic关键字的类型泛型表达式.例如,下面的宏cbrt(x)转换为cbrtl(x),cbrt(x)cbrtf(x)取决于类型x:

    #define cbrt(x) _Generic((x), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(x)
    
    Run Code Online (Sandbox Code Playgroud)
  • 多线程支持(_Thread_local存储类说明符,<threads.h>包括线程创建/管理功能的头文件,互斥锁,条件变量和特定于线程的存储功能,以及_Atomic类型限定符和<stdatomic.h>不间断对象访问).

  • 改进的Unicode支持基于C Unicode技术报告ISO/IEC TR 19769:2004(char16_t以及char32_t用于存储UTF-16/UTF-32编码数据的类型,包括转换函数<uchar.h>和相应的u和U字符串文字前缀,以及UTF-8编码文字的u8前缀).
  • 删除该gets功能,在以前的C语言标准修订版,ISO/IEC 9899:1999/Cor.3:2007(E)中已弃用,支持新的安全替代方案,gets_s.
  • 界限检查界面(附件K).
  • 可分析性特征(附件L).
  • 用于查询浮点类型特征的更多宏,涉及次正规浮点数和类型能够存储的小数位数.
  • 匿名结构和联合,当联合和结构嵌套时很有用,例如在struct T { int tag; union { float x; int n; }; };.
  • 静态断言,这是在比后面的相位平移期间评估#if#error,当类型是由翻译器理解.
  • 独有的创建和打开模式("…x"后缀)open.这种行为就像O_CREAT|O_EXCLPOSIX,它通常用于锁定文件.
  • quick_exit函数作为终止程序的第三种方式,如果终止exit失败,打算至少进行最小的取消初始化.
  • 用于构造复杂值的宏(部分因为real + imaginary*I如果imaginary是无穷大则可能不会产生预期值NaN).


Joh*_*ode 6

根据C 2011标准本身,以下是C99的主要变化:

前言
...
6第三版取消并取代第二版ISO/IEC 9899:1999,经ISO/IEC 9899:1999/Cor 1:2001,ISO/IEC 9899:1999/Cor 2:2004修正, ISO/IEC 9899:1999/Cor 3:2007.上一版本的主要更改包括:

     - 条件(可选)功能(包括之前必需的功能)

     - 支持多个执行线程,包括改进的内存排序模型,原子对象和线程局部存储(<stdatomic.h><threads.h>)

     - 附加浮动-point characteristic macros(<float.h>)

     - 查询和指定对象的对齐方式(<stdalign.h>,<stdlib.h>)

     - Unicode字符和字符串(<uchar.h>)(最初在ISO/IEC TR 19769:2004中指定)

     - 类型泛型表达式

     - 静态断言

     - 匿名结构和联合

     - 否-return功能

     -宏来创建复数(<complex.h>)

     -打开文件进行独占访问的支持

     -删除的gets功能(<stdio.h>)

     -增加了aligned_alloc,at_quick_exitquick_exit函数(<stdlib.h>)

     -用于边界检查接口(最初在ISO规定的(条件)支持/ IEC TR 24731-1:2007)

     - (条件)支持可分析性

  • C11 标准本身只能购买,因此,对于像我、@JohnBode 这样的人以及普通公众来说,N1570 是我们为 C11 提供的最好的(无需付费)。请参阅 [ISO/IEC 9899 - 编程语言 - C](http://www.open-std.org/jtc1/sc22/wg14/www/standards) (3认同)
  • 链接是C11标准的N1570草案。在该草案和最终发布的标准之间进行了一些非常小的更改。 (2认同)