2.1 C 标准演进与关键字详解

发布于:2024-08-13 ⋅ 阅读:(115) ⋅ 点赞:(0)

目录

1 C 标准

1.1 C89 / ANSI C (1989)

1.2 C90 (1990)

1.3 C99 (1999)

1.4 C11 (2011)

1.5 C17 (2018)

1.6 C2x (未来版本)

2 关键字


1 C 标准

        C 语言的标准是指由国际标准化组织(ISO)和国际电工委员会(IEC)共同制定的一系列规范,这些规范定义了 C 语言的语法、特性及其行为。以下是 C 语言的主要标准版本:

1.1 C89 / ANSI C (1989)

  • 这是 C 语言的第一个正式标准,由美国国家标准协会(ANSI)发布。
  • 实际上,这个标准通常被称为 C89 或 ANSI C,它基于 1989 年的 ISO 标准草案。
  • C89 标准规定了一些关键的编程规则和语法结构,如类型定义、变量声明和预处理器指令等。

1.2 C90 (1990)

  • ISO/IEC 9899:1990 是 C 语言的第一个国际标准
  • C90 标准与 C89 非常相似,但在一些细节上有所不同。
  • 它定义了 C 语言的基本语法和功能,包括数据类型、控制结构、函数和库接口等。

1.3 C99 (1999)

  • ISO/IEC 9899:1999 是 C 语言的第二个重要标准
  • C99 引入了许多新特性,例如支持宽字符、复合字面量、变长数组等。
  • 此外,C99 还增强了浮点运算的支持,并增加了新的数学函数。

1.4 C11 (2011)

  • ISO/IEC 9899:2011 是 C 语言的最新标准之一。
  • C11 标准在 C99 的基础上增加了一些新特性,比如线程支持(通过 <threads.h> )、原子操作、动态内存管理改进等。
  • C11 还定义了一些关于并发编程的新 API。

1.5 C17 (2018)

  • ISO/IEC 9899:2018 通常被称为 C17,它是 C11 的一个修正版。
  • C17 标准并没有添加大量新特性,而是对现有标准进行了清理和修正,以提高其可读性和一致性。
  • C17 也被称为 C1z,在 2018 年正式发布前作为代号使用。

1.6 C2x (未来版本)

  • 目前正在开发中的 C 语言标准。
  • C2x 是一个工作中的版本,预计将包含对现有标准的进一步改进和新特性。

        这些标准确保了不同平台和编译器之间 C 语言的一致性,使得程序员能够写出跨平台兼容的代码。随着新版本的推出,C 语言也在不断地进化和发展,以适应现代编程的需求。

        注意:学习一堆关于 C 的版本及标准并无太大意义,关键在于掌握编译器所支持的语言特性,而且我们所学的语法对于初试和机试均不存在问题。


2 关键字

        C 语言中有许多关键字,在后面的章节中将详细介绍这些关键字(不用去记),这里罗列它们的目的是让大家知道 C 语言中的关键字有哪些, 避免命名变量时与关键字重名 (这点完全不用担心,在 CLion 开发环境中,变量重名后会自动提醒大家)。下表列出了 C 语言中的关键字:

关键字分类 关键字
数据类型关键字 void, char, short, int, float, double, long, signed, unsigned, struct, union, enum
控制流程关键字 break, continue, return, if, else, switch, do, while, for, goto
存储类关键字 auto, extern, register, static
修饰符关键字 const, volatile
其他关键字 case, default, sizeof, typedef
C99新增关键字 inline, restrict, _Bool, _Complex, _Imaginary
C11新增关键字 _Alignas, _Alignof, _Atomic, _Generic, _Noreturn, _Static_assert, _Thread_local

        C 语言(包括 C99 和 C11 标准)中的关键字总数是:

        32(传统 C 语言) + 5( C99 新增) + 7( C11 新增) = 44

        但请注意,并不是所有的 C 语言编译器或环境都默认支持 C99 和 C11 的所有特性,因此在某些情况下,可能无法直接使用这些新增的关键字。此外,_Bool、_Complex 和 _Imaginary 这些关键字通常是通过 <stdbool.h>、<complex.h> 等头文件提供的宏或类型定义来使用的,而不是直接作为关键字使用。在这种情况下,我们可能会将它们视为与关键字相关的特性,而不是严格意义上的关键字。


网站公告

今日签到

点亮在社区的每一天
去签到