C语言(C89)32个关键字大体可以分类两类:
1 C89与类型相关的20个关键字C做为强类型语言,类型要显式声明并在编译器做检查。
2 C89与控制结构相关的12个关键字
控制结构实现算法,算法用函数呈现,由函数实现模块化。
3 C99、C11新增关键字
keyword |
Through marco used as |
defined in |
restrict (since C11) |
指针变量修饰 | |
inline (since C11) |
内联函数 | |
_Alignas (since C11) |
alignas |
stdalign.h |
_Alignof (since C11) |
alignof |
stdalign.h |
_Atomic (since C11) |
atomic_bool,atomic_int,… |
stdatomic.h |
_Bool (since C99) |
bool |
stdbool.h |
_Complex (since C99) |
complex |
complex.h |
_Generic (since C11) |
(no macro) | |
_Imaginary (since C99) |
imaginary |
complex.h |
_Noreturn (since C11) |
noreturn |
stdnoreturn.h |
_static_assert (since C11) |
static_assert |
assert.h |
_Thread_local (since C11) |
thread_local |
threads.h |
在C99中,新增了_Bool(关键字)数据类型,在stdbool.h头文件,宏定义bool为-Bool:
#define bool _Bool
#define true 1
#define FALSE 0
C 新增的关键字主要有与类相关的10个关键字,与数据类型相关(包括类型转换)相关的20个关键字,与异常处理相关的5个关键字,与内存管理相关的4个关键字。
sn |
C |
classify |
remark |
1 |
class |
类相关 | |
2 |
explicit |
类相关 | |
3 |
friend |
类相关 | |
4 |
mutable |
类相关 | |
5 |
operator |
类相关 | |
6 |
private |
类相关 | |
7 |
protected |
类相关 | |
8 |
public |
类相关 | |
9 |
this |
类相关 | |
10 |
virtual |
类相关 | |
11 |
bool |
类型相关 | |
12 |
char8_t (since C 20) |
类型相关 | |
13 |
char16_t (since C 11) |
类型相关 | |
14 |
char32_t (since C 11) |
类型相关 | |
15 |
consteval (since C 20) |
类型相关 | |
16 |
constexpr (since C 11) |
类型相关 | |
17 |
decltype (since C 11) |
类型相关 | |
18 |
dynamic_cast |
类型相关 | |
19 |
FALSE |
类型相关 | |
20 |
namespace |
类型相关 | |
21 |
nullptr (since C 11) |
类型相关 | |
22 |
reinterpret_cast |
类型相关 | |
23 |
static_cast |
类型相关 | |
24 |
template |
类型相关 | |
25 |
TRUE |
类型相关 | |
26 |
typeid |
类型相关 | |
27 |
typename |
类型相关 | |
28 |
using |
类型相关 | |
29 |
wchar_t |
类型相关 | |
30 |
const_cast |
类型相关 | |
31 |
alignas (since C 11) |
内存相关 |
内存对齐 |
32 |
alignof (since C 11) |
内存相关 |
内存对齐 |
33 |
delete |
内存相关 | |
34 |
new |
内存相关 | |
35 |
catch |
异常处理 | |
36 |
noexcept (since C 11) |
异常处理 | |
37 |
static_assert (since C 11) |
异常处理 | |
38 |
throw |
异常处理 | |
39 |
try |
异常处理 | |
40 |
concept (since C 20) |
模板实参约束 | |
41 |
requires (since C 20) |
模板实参约束 | |
42 |
export |
模板引用 | |
43 |
asm |
使用汇编 | |
44 |
thread_local (since C 11) |
线程相关 | |
45 |
co_await (since C 20) |
协程相关 | |
46 |
co_return (since C 20) |
协程相关 | |
47 |
co_yield (since C 20) |
协程相关 | |
48 |
and |
&& |
运算符替代写法 |
49 |
and_eq |
&= |
运算符替代写法 |
50 |
bitand |
& |
运算符替代写法 |
51 |
bitor |
| |
运算符替代写法 |
52 |
compl |
~ |
运算符替代写法 |
53 |
not |
! |
运算符替代写法 |
54 |
not_eq |
!= |
运算符替代写法 |
55 |
or |
|| |
运算符替代写法 |
56 |
or_eq |
|= |
运算符替代写法 |
57 |
xor |
^ |
运算符替代写法 |
58 |
xor_eq |
^= |
运算符替代写法 |
综上,数据类型系统与控制结构是C语言的核心。
控制结构实现算法,数据类型系统构造数据结构。
数据类型的三个方面:
① 值域和内存空间需求(sizeof);
② 类型编码和译码规则(如字符的ASCII码,整型的补码,浮点型的阶码、尾码等,使用编码规则编出相关类型数据的限长的二进制序列表示,及对限长的二进制序列按照相关类型数据的编码规则解释出特定类型的数据);
③ 一个操作集(operations);
运算符就是对特定数据类型操作的定义,如算术、比较、逻辑运算符等。
5 总结一下编程语言的核心思想:抽象、分类、分治、模块化。抽象出事物的本质数据,进行分类,利用分治思想抽象出函数,实现模块化。
人类面对大自然这个复杂系统,如何认识它?分科而治,分类研究,虽是无奈之举,但却行之有效。
相应的,计算机科学和编程语言也是如此,如上所述的C的数据类型系统,三类控制结构,以及C 的类类型和泛型。
编程语言也和人类语言一样,都是用来描述名词、形容词、动词的。编程语言的数据类型系统可以用来描述名词、形容词,控制结构和函数可以用来描述由动词描述的功能。更进一步,动词和形容词的主体自然是名词,分类抽象成类,也就是面向对象编程范式的C 了。
ref
https://en.cppreference.com/w/
-End-
,