本文最后更新于 2026-02-26,文章内容可能已经过时。

C语言共有44个关键字(C89标准32个,C99新增5个,C11新增7个),这些关键字是C语言语法的基石,具有特殊含义且不能用作变量名或函数名。

一、C89标准关键字(32个)

1. 数据类型关键字(12个)

char:声明字符类型变量

char c = 'A';        // 声明字符变量
char str[] = "Hello"; // 字符串数组

int:声明整型变量(通常4字节)

int num = 100;       // 声明整型变量

float:声明单精度浮点型变量(4字节)

float price = 9.99f; // 单精度浮点

double:声明双精度浮点型变量(8字节)

double pi = 3.1415926535; // 双精度浮点

short:声明短整型变量(2字节)

short s = 32767;     // 短整型

long:声明长整型变量(4/8字节)

long l = 2147483647L; // 长整型

signed:声明有符号类型(默认)

signed int si = -5;  // 有符号整型

unsigned:声明无符号类型

unsigned int ui = 5; // 无符号整型

void:无类型(函数返回值或指针)

void func() {        // 无返回值函数
    printf("Hello");
}
void *ptr;           // 无类型指针

struct:声明结构体类型

struct Point {
    int x;
    int y;
}; // 声明结构体

union:声明共用体(联合体)类型

union Data {
    int i;
    float f;
}; // 共用体,同一内存位置存储不同数据类型

enum:声明枚举类型

enum Color {RED, GREEN, BLUE}; // 枚举类型

2. 存储类关键字(5个)

auto:自动变量(默认存储类别)

auto int a = 5; // 局部变量,函数结束后自动释放(默认,通常省略)

register:寄存器变量(建议编译器放在CPU寄存器中)

register int counter = 0; // 建议编译器放入寄存器

static:静态变量

void count() {
    static int count = 0; // 局部静态变量,生命周期延长至整个程序
    count++;
    printf("Count: %d\n", count);
}

extern:外部变量/函数声明

// 在文件1中
int global_var = 10;

// 在文件2中
extern int global_var; // 声明外部变量

const:只读变量

const int MAX = 100; // 不能修改的常量

3. 控制语句关键字(9个)

if:条件判断

if (num > 0) {
    printf("Positive");
}

else:条件判断的否定分支

if (num > 0) {
    printf("Positive");
} else {
    printf("Non-positive");
}

switch:多分支选择

switch (grade) {
    case 'A': printf("Excellent"); break;
    case 'B': printf("Good"); break;
    default: printf("Unknown grade");
}

case:switch分支标签

case 'A': // 分支标签

default:switch默认分支

default: // 默认分支

for:循环语句

for (int i = 0; i < 10; i++) {
    printf("%d ", i);
}

while:循环语句(先判断后执行)

int i = 0;
while (i < 10) {
    printf("%d ", i);
    i++;
}

do:循环语句(先执行后判断)

int i = 0;
do {
    printf("%d ", i);
    i++;
} while (i < 10);

goto:无条件跳转(不推荐使用)

start:
    printf("Hello, ");
    goto end;
end:
    printf("World!\n");

4. 其他关键字(6个)

break:跳出当前循环或switch

for (int i = 0; i < 10; i++) {
    if (i == 5) break; // 跳出循环
}

continue:跳过本次循环剩余部分

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) continue; // 跳过偶数
    printf("%d ", i);
}

return:函数返回

int add(int a, int b) {
    return a + b; // 返回值
}

sizeof:计算数据类型或变量大小

int size = sizeof(int); // 获取int类型大小
printf("Size of int: %d bytes", size);

typedef:类型重命名

typedef unsigned int uint32; // 为unsigned int取别名
uint32 value = 10;

volatile:说明变量在程序执行中可被隐含地改变

volatile int flag = 0; // 用于多线程或硬件寄存器

二、C99新增关键字(5个)

inline:内联函数(减少函数调用开销)

inline int add(int a, int b) {
    return a + b;
}

restrict:指针限制(唯一访问该内存)

void copy(int *restrict dest, int *restrict src, int n) {
    for (int i = 0; i < n; i++) {
        dest[i] = src[i];
    }
}

_Bool:布尔类型(true/false)

_Bool flag = true; // 布尔类型

_Complex:复数基本类型

_Complex double c = 1.0 + 2.0*I; // 复数

_Imaginary:虚数类型(没有实部的纯虚数)

_Imaginary float i = 3.0*I; // 纯虚数

三、C11新增关键字(7个)

_Alignas:内存对齐指定

_Alignas(16) int a; // 将a的对齐方式设置为16字节

_Alignof:获取类型对齐值

size_t align = _Alignof(int); // 获取int类型的对齐值

_Atomic:原子操作类型

#include <stdatomic.h>
_Atomic int counter = 0; // 原子变量

_Static_assert:编译期断言

_Static_assert(sizeof(int) == 4, "int must be 4 bytes");

_Noreturn:声明函数无返回

_Noreturn void exit_program() {
    exit(1); // 函数不会返回
}

_Thread_local:线程局部存储

_Thread_local int thread_var = 0; // 每个线程有独立副本

_Generic:提供重载的接口入口

#define max(a, b) _Generic((a), \
    int: (a) > (b) ? (a) : (b), \
    float: (a) > (b) ? (a) : (b) \
)

四、关键使用原则

  1. 大小写敏感:所有关键字均为小写字母
  2. 不可重命名:不能用作变量名、函数名等标识符
  3. 语义明确:每个关键字对应特定的语法规则
  4. C99/C11特性:现代C语言开发中,C99及C11新增关键字越来越常用

提示:C17标准(2018年)是C11的修正版,未新增关键字,截至C17标准C语言共有44个关键字。在实际编程中,建议使用C99或C11标准以获得更丰富的特性和更好的代码可读性。