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)、内联函数等。
- 变长数组(VLA)
例子:
在这个例子中,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 」,也可搜索「 后浪笔记一零二四 」找到我。