跳到主要内容

C语言版本

  1. K&R C(经典C)
    • 背景与历史:这是C语言最初的版本形式,因《C程序设计语言》(The C Programming Language)这本书而得名,作者是Brian Kernighan和Dennis Ritchie(C语言的创造者)。这本书第一版在1978年出版,其中描述的C语言版本就是K&R C。
    • 特点:函数参数的声明方式比较简单,例如可以写成int func(a, b),编译器会默认abint类型。这种声明方式在现代C标准中已经不提倡。它没有const关键字用于定义常量,也缺乏一些现代的类型检查机制。但在当时,为C语言的广泛应用奠定了基础。
  2. C89(ANSI C)
    • 背景与历史:1983年,美国国家标准协会(ANSI)成立了一个委员会来制定C语言的标准,1989年,C语言的第一个ANSI标准(ANSI X3.159 - 1989)发布,这个标准也被国际标准化组织(ISO)采纳,称为ISO C89。这是C语言发展历程中的一个重要里程碑,使得C语言在不同的编译器和平台上有了统一的规范。
    • 特点:引入了函数原型声明,要求在函数声明时明确指定参数的类型,如int func(int a, int b)。增加了constvolatile关键字,const用于定义常量,volatile用于告诉编译器变量的值可能会在程序执行过程中被外部因素(如硬件设备)改变,从而避免编译器过度优化。同时,定义了标准库,包括常见的输入输出函数(如stdio.h中的printfscanf)、字符串处理函数(如string.h中的strcpystrcat)等。
  3. C99
    • 背景与历史:1999年,ISO发布了C99标准。这个标准是在C89的基础上进行了扩充和改进,以适应当时软件开发的新需求。
    • 特点:新增了一些数据类型,如long long int用于表示更大范围的整数。支持可变长数组(VLA,Variable - Length Array),例如int n; scanf("%d", &n); int arr[n];,数组arr的大小可以根据变量n的值动态确定。同时,增强了数学库函数,增加了对复数的支持,在头文件<complex.h>中定义了复数类型和相关的运算函数。还改进了预处理指令,如支持//作为单行注释,就像C++语言一样,这使得代码注释更加方便。
  4. C11
    • 背景与历史:2011年,ISO发布了C11标准。这一版标准进一步完善了C语言,以适应现代计算机系统和软件开发的变化。
    • 特点:增加了多线程支持,通过<threads.h>头文件提供了线程创建、同步等相关的函数和类型定义。引入了原子操作类型和函数,用于在多线程环境下安全地访问和修改共享变量,这些内容在<stdatomic.h>中有详细规定。同时,改进了内存对齐相关的内容,并且对一些边界情况和错误处理进行了更细致的规范,使得C语言在安全性和可靠性方面有了进一步提升。
  5. C17(C18)
    • 背景与历史:C17(有时也称为C18,因为ISO/IEC 9899:2018主要是C17的勘误修正)是C语言标准的较新版本。它主要是对C11标准进行了一些小的修正和澄清。
    • 特点:修正了C11标准中的一些文档错误和模糊之处,使得标准更加精确和易于理解。没有像C99相对于C89或者C11相对于C99那样引入大量的新特性,但仍然对语言的稳定性和准确性起到了重要作用。
  6. C23(正在发展)
    • 背景与历史:目前C语言标准委员会正在致力于C23标准的制定。这个版本有望引入新的特性来进一步完善C语言。
    • 已知的一些可能的改进方向(尚未完全确定):可能会对语言的安全性、模块性等方面进行改进。例如,可能会加强对数组边界检查的支持,以减少缓冲区溢出等常见的安全隐患。也可能会引入更好的模块系统,方便大型项目的代码组织和管理。