C99、C11和C17标准的区别

C99、C11和C17是C语言的三个连续的国际标准,每个新标准都在前一个标准的基础上引入了新特性和改进。

C99 相对于 C90 的改进:

  • 变长数组(VLA):C99 允许在运行时确定数组的长度,这增加了语言的灵活性。
  • 内联函数:C99 引入了内联函数的概念,允许编译器将函数体直接嵌入到函数调用处以减少函数调用的开销。
  • 新的数据类型:比如 long long 和 _Bool 类型,以及对复数的支持。
  • 复合字面量:允许在声明的同时初始化数组或结构体。
  • 单行注释:C99 允许使用 // 单行注释,使得代码更加简洁。

C11 相对于 C99 的改进:

  • 匿名结构体:C11 允许在代码中定义匿名结构体,这使得代码更加简洁。
  • 泛型选择表达式:C11 引入了 _Generic 关键字,允许在编译时根据条件选择不同的类型。
  • 多线程支持:C11 引入了 _Atomic 类型和线程局部存储等特性,增强了对多线程编程的支持。
  • 静态断言:C11 引入了 _Static_assert 关键字,允许在编译时进行断言。
  • 边界检查接口:C11 提供了边界检查的接口,增强了程序的安全性。

C17 相对于 C11 的改进:

  • 初始化宏:C17 引入了初始化宏,使得宏定义可以包含初始化代码。
  • 属性:C17 引入了更多的属性,如 fallthroughnodiscard 等,以帮助编译器进行更好的优化和错误检查。
  • 线程局部存储:C17 进一步增强了对线程局部存储的支持。
  • 复合字面量改进:C17 允许在复合字面量中使用类型转换。

总的来说,C99 标准对 C90 进行了现代化的更新,C11 则在现代计算机编程环境下对 C99 进行了进一步的增强,而 C17 主要是对 C11 标准的修订和更新,旨在进一步改进语言的特性和可用性。每个新标准都使得 C 语言更加强大和灵活,以适应现代编程的需求。

查看Linux系统支持的C标准

要查看当前系统执行的 C 标准是否是 C11,可以使用以下方法

  • 使用 gcc 命令查看支持的 C 语言标准: 执行以下命令:

    gcc -E -dM - </dev/null | grep "STDC_VERSION"

    这个命令会显示 __STDC_VERSION__ 的定义,从而可以知道默认支持的 C 标准。输出结果和 C 标准的对应关系如下:

    • 如果是 #define __STDC_VERSION__ 199901L,则默认支持的是 C99 标准;
    • 如果是 #define __STDC_VERSION__ 201112L,则默认支持的是 C11 标准
    • 如果是 #define __STDC_VERSION__ 201710L,则默认支持的是 C17 标准;
    • 如果没有查到,则默认支持的是 C89 标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值