美文网首页
C新标准 - C99和C11

C新标准 - C99和C11

作者: frameyl | 来源:发表于2018-06-08 23:28 被阅读0次

C99标准现在还有些编译器支持的不太好,但是用gcc已经完全没问题了。

C99重要的更新如下:
指定初始化(Designated Initializers)

允许对数组元素或结构体元素的特定成员进行初始化而不用按顺序进行初始化。 主要是结构体成员的指定,和数组成员的指定。
结构体成员,比如,

struct S {
  int a;
  int b;
};
struct S instance1={
  .a=1,
};
struct S array1[5]={
  [1].a = 3,
  [1].b = 5,
  {
    // array1[2] = {7, 11}
    .a = 7, .b = 11
  }
  // array1[4] = {13, 17}
  [4] = {
    .a = 13, .b = 17
  }
};
变长数组(Variable Length Arrays)

C99支持动态长度的数组(VLA),也就是数组在栈上由运行时分配。退出作用域时,数组使用的空间被释放。所以VLA不能在全局定义,或者有extern,static修饰符。

int n;              //define a variable n
int array[n];       //define an array with length n
伸缩型数组成员(Flexible Array Members)

C99支持伸缩数组成员,最后一个结构体成员的大小可以在运行时分配。

struct flex_array  
{  
       int a;  
       double b;  
       char c[];  
};  

struct flex_array *fa_sample = (struct flex_array*)malloc(sizeof(flex_array)+100*sizeof(char));

fa_sample->c[2] = 's';
bool类型

用<stdbool.h>来使用bool类型,而使用true或者false来为变量赋值或比较。

long long类型

新的long long类型为了统一不同编译器实现对64位的支持,在format时使用%lld来输出long long。

inline函数

尽量使用inline函数来替代所谓的“函数宏”。

混合声明(mix declarations and code)

现在可以在代码里随处定义变量了。但是要注意作用域。

// 行注释

不解释,编译器早就支持了。

for循环变量初始化(for loop intializers)

在for语句里可以定义局部变量了,早就该有的特性。

变参宏(Variadic Macros)

gcc的编译器很早之前就支持这个特性了,微软的编译器之前是不可以这个用的。最新的版本不确定。

#define debug(fmt, ...)                    \
        printf("[DEBUG] %s:%d <%s>: " fmt, \
               __FILE__, __LINE__, __func__, ##__VA_ARGS__)
复合常量(Compound Literals)
复数(Complex Numbers)

用<complex.h>来使用complex类型

restrict指针
reference

https://blog.csdn.net/syrchina/article/details/6662243

C11 新特性

C11的主要新特性是增加了<thread.h>,还有thread_local修饰符表示变量只在本线程可用。另外相比<pthread.h>,调用格式完全类似,只是函数名前缀缩短了一下,现在是thrd_,mtx_, cnd_和tss_作为前缀。

相关文章

  • C新标准 - C99和C11

    C99标准现在还有些编译器支持的不太好,但是用gcc已经完全没问题了。 C99重要的更新如下: 指定初始化(Des...

  • 兼容性和稳定性

    C++11 与 C99 的兼容 C11 之前最新的 C标准是 1999 年制定的 C99 标准。而第一个 C++ ...

  • C语言笔记(3)

    Collected Webpage: 【整理】C语言的各种版本:C89,AMD1,C99,C11 | 在路上 Co...

  • C语言的原子操作

    C语言原子操作是在C11(C11:标准是C语言标准的第三版,前一个标准版本是[C99]标准)引入的,定义在头文件 ...

  • c语言标准

    四种标准 k&RC (1978) C89 (1989) C99 (1999) C11 (2011) k&RC 主要...

  • 运行程序时的一些废话

    main()函数使用 main() c90标准勉强接受这种形式,但是c99和c11标准不允许这样写,因此,即使你使...

  • 「C」类型大小

    当前系统指定的类型大小 sizeof 为c语言内置运算符,以字节为单位给出指定类型的大小。C99和C11提供的%z...

  • C语言的几个标准

    我们在很多地方都有看到过K&R C、ANSI C、ISO C、C89、C99、C11等标准,具体有什么不同呢?(文...

  • c语言关键词 和 控制语句

    C语言关键字分类整理 C语言总览: 强类型,面向过程 简洁、灵活:32个关键字(C99标准新增5个,C11新增7个...

  • C标准库

    今天总结一下C语言标准库。 C语言标准库(C89)包含15个头文件,新的C99以及C11又定义了一些其他的库,这里...

网友评论

      本文标题:C新标准 - C99和C11

      本文链接:https://www.haomeiwen.com/subject/waoahftx.html