目录
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> 等头文件提供的宏或类型定义来使用的,而不是直接作为关键字使用。在这种情况下,我们可能会将它们视为与关键字相关的特性,而不是严格意义上的关键字。