后浪笔记一零二四

C89/ANSI c

1989年发布的ANSI X3.159-1989标准,也称为C89或ANSI C。

C90

ISO/IEC 9899:1990,通常称为C90。

这是国际标准化组织(ISO)采纳的第一个C语言标准,与C89几乎相同。

C95

ISO/IEC 9899:1995,这是对C90的一次小修订,主要是为了增加对宽字符的支持(如wchar_t类型)。

C99

ISO/IEC 9899:1999,这个标准引入了许多新的特性,比如混合声明和代码块、布尔类型(_Bool)、复数类型、变长数组(VLA)、内联函数等。

  1. 变长数组(VLA)

例子:

1
2
3
void example(int n) {
    int arr[n];  // n 是在运行时确定的变量
}

在这个例子中,n是在调用example函数时传递进来的参数,因此arr的大小只有在运行时才能确定。

虽然VLA提供了灵活性,但也有一些需要注意的地方:

  • 栈溢出风险:如果数组尺寸过大,可能会导致栈溢出,因为VLA通常是分配在栈上的。这可能导致程序崩溃或其他未定义行为。
  • 性能影响:由于VLA是在栈上分配的,对于非常大的数组来说,可能会影响性能。
  • 兼容性问题:并非所有的编译器都完全支持VLA,尤其是在更老版本的编译器或者非C99/C11兼容模式下。此外,从C11开始,VLA不再是强制要求的支持特性,而是可选的。
  • 作用域限制:VLA只能在其声明的作用域内有效,即当控制流离开该作用域时,VLA将被自动销毁。

C11

ISO/IEC 9899:2011,此版本引入了线程支持(通过<threads.h>头文件)、匿名结构体和匿名联合体、泛型选择器(_Generic关键字)、静态断言(_Static_assert)等新特性。

C17/C18

ISO/IEC 9899:2018,有时被称为C17或C18。

这个版本主要是对C11进行了一些技术修正,并移除了某些过时的功能(如gets()函数),但没有添加大量新特性。

gcc支持的c标准

查看该gcc默认使用的c标准: gcc -dM -E -x c - < /dev/null | grep __STDC_VERSION__

查看该gcc支持的所有c标准: man gcc,之后搜索

    -std=

本文发表于 0001-01-01,最后修改于 0001-01-01。

本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image