龙空技术网

C11早就发布了,你在使用吗?

话说软件 992

前言:

此刻你们对“c语言的指针类型是原子类型”大约比较着重,朋友们都需要分析一些“c语言的指针类型是原子类型”的相关知识。那么小编同时在网上收集了一些有关“c语言的指针类型是原子类型””的相关内容,希望兄弟们能喜欢,姐妹们一起来学习一下吧!

C11(C1X)有哪些新特性

C11 指的是 ISO/IEC 9899:2011,在此之前C语言标准称为C99。目前主流编译器,包括GCC, Clang, MSVC 都已经支持C11标准。C11仍然向后兼容了C99。

下面介绍一下C11新增加的新特性:

增强了对Unicode的支持。

其中针对UTF-16编码增加了char16_t类型,针对UTF-32编码,增加了char32_t类型。如下代码展示了 char16_t类型的用法(char32_t 同理)。其中c16rtomb函数用来将char16_t转为多字节码,使用该函数需要包含头文件<uchar.h>。

上面代码运行后输出:

使用了更加安全的一些函数替代之前的版本。 如用fopen_s()替代fopen(), 用strcat_s()替代strcat()等等。同时删除了gets()函数,增加gets_s()函数。增加了 _Noreturn 函数标记。由该关键字修饰的函数用来告诉编译器,执行该函数后将不再返回,以便于编译器提供一些优化。进行了对齐标准化处理,使用_Alignas来指定对齐字节数,以便于充分利用硬件系统来提升程序性能。可以使用_Alignof可以来获取一个类型或者变量的首先对齐字节数。如下代码所示:

执行上面的代码,得到:

多线程支持。需要头文件<threads.h>。在之前的开发中,多线程的实现都是依靠操作系统提供的API来实现的,C11在语言层面引入了多线程,其定义了memory model, 支持原子操作。如果C11的实现定义宏_STDC_NO_THREADS_则表示其实现不支持多线程操作。原子类型支持。 _Atomic用来定义一个原子类型的变量。如下的代码:

_Atomic const long* p; // 定义了一个指向原子的const long 型的指针

定义原子变量需要包含头文件<stdatomic.h>。

_Generic泛型的支持。C11中可以使用_Generic关键字来完成根据参数类型来选择表达式的功能。例如下面的代码:

执行结果为:

静态断言,即Static assertions。在C11中可以使用_Static_assert关键字来进行编译时断言。如下示例:

_Static_assert(sizeof(unsigned int) == 4, “期望4字节无符号整数”);

支持了匿名结构体和匿名联合体。如下代码:

执行上面的代码,输出

增加了文件访问新的flag : “x”. “x”可以和”w”和“w+”组合,如果使用了”x”那么如果访问文件时,文件已经存在则fopen函数会执行失败。新增加了quick_exit()退出函数。调该函数会在资源未被完全清理的情况下终止程序。

标签: #c语言的指针类型是原子类型 #c语言新标准c11