C11与C99的变化对比

news/2024/11/20 17:31:32/

C11标准曾用名C1X。

C11标准是C语言标准的第三个版本,前一个标准版本是C99标准。2011年12月8日,国际标准化组织(ISO)和国际电工委员会

(IEC)旗下的C语言标准委员会正式发布了C11标准。

C11标准的最终定稿草案是免费开放的,但是正式标准文件是需要付费的。

当前,支持此标准的主流C++编译器有:GCC、Clang、Intel C++ Complier等。

 

相比C99的变化:

 1.对齐处理操作符 alignof,函数aligned_alloc(),以及头文件<stdalign.h>

 2._Noreturn函数标记,类似于GCC的__((noreturn))。ps:_Noreturn void thrd_exit(int res);

3._Generic 关键词,有点儿类似于 gcc 的 typeof。

4.静态断言( static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理。例子:

_Static_assert(FOO > 0, "FOO has a wrong value");

5.删除了 gets() 函数,C99中已经将此函数被标记为过时,推荐新的替代函数 gets_s()。

6.新的 fopen() 模式,(“…x”)。类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用。

7.匿名结构体/联合体,这个早已经在 gcc 中了,我们并不陌生

8.多线程支持,包括:_Thread_local,头文件 <threads.h>,里面包含线程的创建和管理函数(比如 thrd_create(),thrd_exit()),mutex (比如 mtx_lock(),mtx_unlock())等等

9._Atomic类型修饰符和 头文件 <stdatomic.h>

10.带边界检查(Bounds-checking)的函数接口,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等

11.改进的 Unicode 支持,新的头文件 <uchar.h> 等。

12.新增 quick_exit() 函数,作为第三种终止程序的方式,当 exit() 失败时可以做最少的清理工作(deinitializition)

13. 创建复数的宏, CMPLX()

14.更多浮点数处理的宏 (More macros for querying the characteristics of floating point types, concerning subnormal floating point numbers and the number of decimal digits the type is able to store)。

15.struct timespec 成为 time.h 的一部分,以及宏 TIME_UTC,函数 timespec_get()。

 

C11还缺少什么?

1、对IEEE754标准-2008的半精度浮点数的支持。尽管遵循GNU C标准规范的编译器(GCC以及Clang等)使用了C扩展关键字__fp16,但是只能对半精度浮点数进行引用,而不能做任何算术操作。因此,这个特性应当在下一个C语言标准中立马加入进去的,建议使用_Half作为半精度浮点数类型的关键字。

2、匿名函数:匿名函数,也叫lambda表达式,是现代计算机编程语言的一个典范特性,在Clang编译器中已经通过blocks语法 [4]  进行了支持,该语法也被发表到了下一代C标准的提案 [5-6]  。Lambda表达式非常适用于多核多线程并行计算,而不仅仅只是用于语法糖。

3、增加对UTF-16字符编码字符串格式符的支持。在标准C语言中,直到C11还只能支持UTF-8编码字符串的格式,采用%s。而对于UTF-16编码字符串的各类操作都比较欠缺,而只有UTF-16转UTF-8的库函数c16rtomb以及UTF-8转UTF-16的标准库函数mbrtoc16可使用,因此在实际项目工程上,用起来十分繁琐。这里建议后续标准C语言采用%S表示UTF-16的字符串格式符,%s作为UTF-8字符串格式符,%C表示UTF-16字符,%c表示UTF-8字符。


http://www.ppmy.cn/news/615653.html

相关文章

C11 标准下的 C 语言编程

一、摘要 一直以来&#xff0c;我们所学习的 C 语言大多是 ANSI-C 标准&#xff0c;也就是后来被标准化的 C89 标准。在 1999 年发布的 C99 和 2011 年发布的 C11 标准在此之上&#xff0c;引入了许多新的特性&#xff0c;也解决了许多问题。因此&#xff0c;随着标准的发布&a…

Visual C++ 的 fatal error C1001

如果你是一位老资格的 Visual C 用户&#xff0c;那一定会对 Visual C 的 fatal error C1001 不会陌生。如果你在用 VC6 编一个规模较大的工程&#xff0c;如果你在用 VC6 编译一个用到了模板的工程&#xff0c;那恭喜你&#xff0c;这个错误会时不时冒地出来和你打招呼&#x…

C++ 错误error C2011:类型重定义的解决办法

当在.h文件中定义一个枚举&#xff08;enum&#xff09;类型时&#xff0c;由于这个.h的头文件&#xff0c;会被其他好几个.h文件引用&#xff0c;所以在编译的时候&#xff0c;会出现error C2011:类型重定义的报错。 这样的错误一度让楼主怀疑人生啊。 其解决办法是&#xf…

五、菜单管理

云尚办公系统&#xff1a;菜单管理 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布&#xff0c;并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步&#xff01;&#xff01;&#x…

【FoxMail】无法登录, 一直让创建问题.

问题原因: 每次打开FoxMail的时候都显示创建, 创建完成之后,再次打开FoxMail还是显示创建. 出现这个现象的原因是因为使用的公司电脑, 我登录电脑的账号并非超级管理员, 因此导致无法登录. 解决方式: 右键快捷图标, 点击"以管理员身份运行", 即可直接登录进去. 但是…

MAC 系统下使用邮件客户端登录腾讯企业邮箱失败问题

mac邮件客户端版本&#xff1a;版本 12.4 (3445.104.14) 第一步&#xff1a;选择添加账户中其他选项 第二步&#xff1a; 类型设置&#xff1a;选择IMAP 收件服务器设置为&#xff1a;imap.exmail.qq.com 发件服务器设置为&#xff1a;smtp.exmail.qq.com 官方文档&#x…

mac 邮箱客户端之腾讯企业邮箱设置 无法验证账号或密码

1.首先我们要先登录腾讯企业邮箱网页版点击 ”设置“——“账号” 2.找到客户端专用密码——生成新密码&#xff08;也就是授权码&#xff09; 3.去添加用户 4.输入用户名/密码&#xff08;上面获得的授权码&#xff09;&#xff0c;点击登录他还是会提示 无法验证账号或密码…

邮箱无法登陆的解决方法

regsvr32 jscript.dll 今天去找同学玩,顺便帮他看机器的奇怪问题,用ie无法登陆邮箱。。。。。但是gmail可用。 下载firefox后也可登陆邮箱,但是依旧不可使用ie登陆。 具体现象为 输入帐号密码后页面空白,状态栏显示完毕。 知之为知之,不知google之为解决疑难问题的好方法,…