C 语言编程教程

C 语言 - 首页

C 语言基础

C 语言 - 概述 C 语言 - 特性 C 语言 - 发展历史 C 语言 - 环境设置 C 语言 - 程序结构 C 语言 - Hello World C - 编译过程 C - 注释 C - 标记 C - 关键字 C - 标识符 C - 用户输入 C - 基本语法 C - 数据类型 C - 变量 C - 整数提升 C - 类型转换 C - 类型转换 C - 布尔值

C 语言中的常量和文字

C - 常量 C - 字面量 C - 转义序列 C - 格式说明符

C 语言中的运算符

C - 运算符 C - 算术运算符 C - 关系运算符 C - 逻辑运算符 C - 位运算符 C - 赋值运算符 C - 一元运算符 C - 递增和递减运算符 C - 三元运算符 C - sizeof 运算符 C - 运算符优先级 C - 其他运算符

C 语言中的决策

C - 决策 C - if 语句 C - if...else 语句 C - 嵌套 if 语句 C - switch 语句 C - 嵌套 switch 语句

C 语言中的循环

C - 循环 C - While 循环 C - For 循环 C - Do...while 循环 C - 嵌套循环 C - 无限循环 C - Break 语句 C - Continue 语句 C - goto 语句

C 语言中的函数

C - 函数 C - Main 函数 C - 按值调用函数 C - 按引用调用函数 C - 嵌套函数 C - 可变参数函数 C - 用户定义函数 C - 回调函数 C - return 语句 C - 递归

C 语言中的作用域规则

C - 作用域规则 C - 静态变量 C - 全局变量

C 语言中的数组

C - 数组 C - 数组的属性 C - 多维数组 C - 将数组传递给函数 C - 从函数返回数组 C - 可变长度数组

C 语言中的指针

C - 指针 C - 指针和数组 C - 指针的应用 C - 指针运算 C - 指针数组 C - 指向指针的指针 C - 将指针传递给函数 C - 从函数返回指针 C - 函数指针 C - 指向数组的指针 C - 指向结构体的指针 C - 指针链 C - 指针 vs 数组 C - 字符指针和函数 C - NULL 指针 C - void 指针 C - 悬垂指针 C - 解引用指针 C - Near、Far 和 Huge 指针 C - 指针数组的初始化 C - 指针与多维数组

C 语言中的字符串

C - 字符串 C - 字符串数组 C - 特殊字符

C 语言的结构体和联合

C - 结构体 C - 结构体和函数 C - 结构体数组 C - 自引用结构 C - 查找表 C - 点 (.) 运算符 C - 枚举(或 enum) C - 结构填充和打包 C - 嵌套结构 C - 匿名结构和联合 C - 联合 C - Bit 位字段 C - Typedef

C 语言中的文件处理

C - 输入和输出 C - 文件 I/O(文件处理)

C 语言中的预处理器

C - 预处理器 C - #pragma 编译指示 C - 预处理器操作符 C - 宏 C - 头文件

C 语言中的内存管理

C - 内存管理 C - 内存地址 C - 存储类

C 其他主题

C - 错误处理 C - 可变参数 C - 命令执行 C - 数学函数 C - static 静态关键字 C - 随机数生成 C - 命令行参数

C 语言编程资源

C语言问题与解答答案 C语言快速指南 C语言速查表 C语言实用资源 C语言讨论


C - 关键字

关键字是编译器中预定义的具有特殊含义的字,它们不能用于其他用途。根据 C99 标准,C 语言有 32 个关键字。关键字不能用作标识符

下表列出了 C 语言中所有可用的关键字(保留字):

autodoubleintstruct
breakelselongswitch
caseenumregistertypedef
charexternreturnunion
continueforsignedvoid
doifstaticwhile
defaultgotosizeofvolatile
constfloatshortunsigned

C 语言中的所有关键字都使用小写字母,但新添加的关键字则使用大写字母。C 语言区分大小写。因此,int 是关键字,但 INT 或 Int 不被识别为关键字。从 C99 开始引入的新关键字以下划线开头。编译器会检查源代码中所有关键字的语法正确性,然后将其转换为机器码。

C 语言关键字示例

在下面的程序中,我们将关键字用作标识符,即用户定义函数的名称,这将导致编译错误。

#include <stdio.h>

void register(int, int);
int main () {

   /* 变量定义: */
   int a=5, b=7;
   register(a,b);
 
   return 0;
}
void register(int a, int b)
{
   printf("%d", a+b);
}

错误

main.c:3:15: error: expected identifier or '(' before 'int'
    3 | void register(int, int);
      |               ^~~
main.c: In function 'main':
main.c:8:14: error: expected ')' before ',' token
    8 |    register(a,b);
      |              ^
      |              )
main.c: At top level:
main.c:12:15: error: expected identifier or '(' before 'int'
   12 | void register(int a, int b)
      |               ^

错误的原因是我们使用了关键字 register 作为用户定义函数的名称,这是不允许的。

ANSI C 版本有 32 个关键字。这些关键字是程序逻辑的基本元素。这些关键字大致可以分为以下几类:

  • 主要数据类型
  • 用户定义类型
  • 存储类型
  • 条件语句
  • 循环和循环控制
  • 其他

让我们讨论一下每个类别中的关键字。

主要类型 C 关键字

这些关键字用于变量声明。C 是一种静态类型语言,必须声明要使用的变量。 C 语言中的变量使用以下关键字声明:

int 声明一个整型变量
long 声明一个长整型变量
short 声明一个短整型变量
signed 声明一个有符号变量
double 声明一个双精度变量
char 声明一个字符变量
float 声明一个浮点型变量变量
unsigned 声明一个无符号变量
void 指定无效返回类型

用户定义类型 C 关键字

C 语言允许您根据需要定义新的数据类型。用户定义类型包含一个或多个主要类型的元素。

用户定义数据类型提供以下关键字 -

struct 声明一个结构体类型
typedef 创建一个新的数据类型
union 声明一个联合类型
enum 声明一个枚举类型

C 语言存储类型关键字

以下一组关键字称为存储说明符。它们指示变量在内存中的存储位置。变量的默认存储类型为 auto,但您可以要求编译器生成具有特定存储属性的变量。

auto 指定自动存储类
extern 声明变量或函数
static 指定静态存储类
register 指定寄存器存储类

C 条件语句关键字

以下关键字可帮助您在程序中添加条件逻辑。用 if 和 else 关键字表达的条件逻辑为一个条件提供了两种可选操作。对于多路分支,使用switch case构造。在 C 语言中,汇编程序中的跳转操作由 goto 关键字 实现。

goto 跳转到带标签的语句
if 启动 if 语句
else 当 if 条件为 false 时执行
case 标记 switch 中的语句
switch 启动 switch语句
default 在 switch 语句中指定默认语句

循环和循环控制 C 关键字

重复或迭代是算法的一个重要方面。C 语言提供了不同的循环构建方法,以及用于控制循环行为的关键字。每个关键字都可以构建具有不同特征和用途的循环。

For 启动一个 for 循环
do 启动一个 do-while 循环
while 启动一个 while 循环
continue 跳过循环的一次迭代
break 终止循环或 switch 语句

其他 C 关键字

以下其他关键字也非常重要:

const 指定常量值
Sizeof 确定数据类型的大小
Volatile 编译器认为变量的值可能随时更改

在C99 版本中,新增了 5 个关键字 -

  • _Bool
  • _Complex
  • _Imaginary
  • inline

C11 中,新增了 7 个关键字 -

  • _Alignas
  • _Alignof
  • _Atomic
  • _Generic
  • _Noreturn
  • _Static_assert

C23 标准发布时,将引入 14 个关键字 -

  • alignas
  • alignof
  • bool
  • constexpr
  • false
  • nullptr
  • static_assert
  • thread_local
  • true
  • typeof
  • typeof_unqual
  • _Decimal128

大多数最近保留的字以下划线加大写字母开头,因为现有的程序源代码不应该使用这些标识符。

使用关键字时必须牢记以下几点:

  • 关键字由编程语言保留,并具有预定义的含义。它们不能用作变量或函数的名称。
  • 每个关键字必须按照其规定的语法使用。如果违反语法,编译器会报告编译错误。
  • C 语言是最小的计算机语言之一,其 ANSI C 版本只有 32 个关键字,尽管后来又添加了一些关键字。