我目前正在学习C语言。我读的是基于C99的书籍(The book)。在完成这本书后,我想更新我的知识到C11,或者如果有很大的区别,更换资源。因此,我所要求的是一个解释或资源来更新我的知识。我只发现了这个来源。然而,它似乎没有涵盖我需要的信息,或者不够简洁明了。
提前致谢。 附言:我想学习C11,因为我认为它是当前普遍使用的标准。如果不是,请告知我。
提前致谢。 附言:我想学习C11,因为我认为它是当前普遍使用的标准。如果不是,请告知我。
关于C11标准的好概述:
该标准包括对C99语言和库规范的多项更改,例如:
_Alignas
说明符,_Alignof
运算符,aligned_alloc
函数,<stdalign.h>
头文件)_Noreturn
函数说明符和<stdnoreturn.h>
头文件使用_Generic
关键字的类型通用表达式。例如,以下宏cbrt(x)
根据x
的类型将翻译为cbrtl(x)
、cbrt(x)
或cbrtf(x)
:
#define cbrt(x) _Generic((x), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(x)
多线程支持(_Thread_local
存储类说明符,<threads.h>
头文件包括线程创建/管理函数、互斥锁、条件变量和线程特定存储功能,以及_Atomic
类型限定符和<stdatomic.h>
用于不可中断对象访问)。
char16_t
和char32_t
类型用于存储UTF-16/UTF-32
编码数据,包括在<uchar.h>
中的转换函数和相应的u和U字符串字面量前缀,以及用于UTF-8
编码字面量的u8前缀)。gets
函数,改为使用新的安全替代方案gets_s
。struct T { int tag; union { float x; int n; }; };
。#if
和#error
晚一些,当翻译器理解类型时。open
的独占创建和打开模式("…x"
后缀)。这类似于POSIX
中的O_CREAT|O_EXCL
,通常用于锁文件。quick_exit
函数作为第三种终止程序的方式,旨在进行至少最小的去初始化操作,如果使用exit
终止失败。real + imaginary*I
如果imaginary
是无限或NaN
可能不会产生预期的值)。前言
...
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>
)
— 其他浮点特征宏 (<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 中指定)
— (条件) 支持可分析性