05-c语言关键字具体用法
本文最后更新于 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) \
)
四、关键使用原则
- 大小写敏感:所有关键字均为小写字母
- 不可重命名:不能用作变量名、函数名等标识符
- 语义明确:每个关键字对应特定的语法规则
- C99/C11特性:现代C语言开发中,C99及C11新增关键字越来越常用
提示:C17标准(2018年)是C11的修正版,未新增关键字,截至C17标准C语言共有44个关键字。在实际编程中,建议使用C99或C11标准以获得更丰富的特性和更好的代码可读性。
- 感谢你赐予我前进的力量

