我正在学习c,现在。 The book我读的是基于C99的。我想在完成本书后将我的知识更新到C11,或者如果存在重大差异则更改资源。因此,我要求的是更新我的知识的解释或资源。我只找到了this source。然而,它似乎并不包含我需要或不简洁的信息。
提前致谢。 P.S:我想学习C11,因为我认为它现在是普遍的标准。如果没有,请通知我。
答案 0 :(得分:24)
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)
多线程支持(_Thread_local
存储类说明符,<threads.h>
标头,包括线程创建/管理函数,互斥锁,条件变量和特定于线程的存储功能,以及{ {1}}类型限定符和_Atomic
用于不间断对象访问。)
<stdatomic.h>
和char16_t
类型改进了Unicode支持,用于存储char32_t
编码数据,包括{{1}中的转换函数和相应的u和U字符串文字前缀,以及UTF-16/UTF-32
编码文字的u8前缀。)<uchar.h>
函数,在以前的C语言标准修订版ISO / IEC 9899:1999 / Cor.3:2007(E)中弃用,支持新的安全替代方案{{1} }。UTF-8
。gets
和gets_s
之后的阶段进行翻译时进行评估。struct T { int tag; union { float x; int n; }; };
的独占创建和打开模式(#if
后缀)。其行为类似于#error
中的"…x"
,通常用于锁定文件。open
函数作为终止程序的第三种方式,如果O_CREAT|O_EXCL
终止失败,则至少要进行最小的取消初始化。POSIX
如果quick_exit
为无限或exit
,则real + imaginary*I
可能无法产生预期值。答案 1 :(得分:6)
根据C 2011 standard本身,以下是C99的主要变化:
的前言强>
...
6第三版取消并取代第二版,ISO / IEC 9899:1999,as 经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>
强>)
- 其他浮点特征宏(<float.h>
)
- 查询和指定对象的对齐方式(<stdalign.h>
,<stdlib.h>
)
- Unicode字符和字符串(<uchar.h>
)(最初在 ISO / IEC TR 19769:2004)
- 类型通用表达式
- 静态断言
- 匿名结构和工会
- 无返回功能
- 用于创建复数的宏(<complex.h>
)
- 支持打开专用访问文件
- 删除了gets
功能(<stdio.h>
)
- 添加了aligned_alloc
,at_quick_exit
和quick_exit
功能 (的<stdlib.h>
强>)
- (条件)支持边界检查接口(最初在 ISO / IEC TR 24731-1:2007)
- (有条件的)支持可分析性