Closed. This question needs to be more focused。它当前不接受答案。












想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。

4年前关闭。



Improve this question




我正在学习c。我阅读的The book基于C99。我想在完成本书后将自己的知识更新为C11,或者如果存在重大差异,请更改资源。因此,我要的是一种解释或资源来更新我的知识。我只找到this source。但是,它似乎不包含我需要或不简洁的信息。

提前致谢。
附注:我想学习C11,因为我认为这是目前流行的标准。如果没有,请通知我。

最佳答案

良好的C11标准概述:

  • https://en.wikipedia.org/wiki/C11_(C_standard_revision)
  • http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
  • https://smartbear.com/blog/test-and-monitor/c11-a-new-c-standard-aiming-at-safer-programming/

  • 该标准包括对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> header ,包括线程创建/管理功能,互斥锁,条件变量和特定于线程的存储功能,以及_Atomic类型限定符和<stdatomic.h>,用于不间断的对象访问)。
  • 基于C Unicode技术报告ISO / IEC TR 19769:2004改进的Unicode支持(用于存储char16_t编码数据的char32_tUTF-16/UTF-32类型,包括<uchar.h>中的转换函数以及相应的u和U字符串文字前缀以及u8前缀用于UTF-8编码的文字。
  • 删除gets函数,在以前的C语言标准修订版ISO / IEC 9899:1999 / Cor.3:2007(E)中已弃用,取而代之的是新的安全替代方法gets_s
  • 边界检查接口(interface)(附件K)。
  • 可分析性功能(附件L)。
  • 用于查询浮点类型特征的更多宏,涉及到非标准浮点数和该类型能够存储的十进制数字的数目。
  • 匿名结构和联合,当联合和结构嵌套时非常有用,例如在struct T { int tag; union { float x; int n; }; };中。
  • 静态断言,当翻译器理解类型时,将在翻译过程中在比#if#error更高的阶段评估该断言。
  • 专用于"…x"的创建和打开模式(open后缀)。行为类似于O_CREAT|O_EXCL中的POSIX,通常用于锁定文件。
  • quick_exit函数是终止程序的第三种方法,如果终止exit失败,则至少要进行最少的反初始化。
  • 用于构造复杂值的宏(部分原因是,如果real + imaginary*I为infinite或imaginaryNaN可能不会产生预期值)。
  • 关于c - c99和c11之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38405260/

    10-11 18:36