• 关键字都有特殊的意义,是保留给C语⾔使⽤的
• 程序员⾃⼰在创建标识符的时候是不能和关键字重复的
• 关键字也是不能⾃⼰创建的。
C语⾔中有⼀批保留的名字的符号,⽐如: int 、 if 、 return ,这些符号被称为保留字或者关键
字。
C语言有多少个关键字?
c语言中的关键字是不是不需要头文件?
C 语言共有 32 个关键字。
数据类型关键字(12 个)
char:声明字符型变量。
double:声明双精度浮点型变量。
enum:定义枚举类型。
float:声明单精度浮点型变量。
int:声明整型变量。
long:用于长整型变量声明。
short:声明短整型变量。
signed:修饰有符号整数类型。
struct:定义结构体类型。
union:定义联合体类型。
unsigned:修饰无符号整数类型。
void:用于函数无返回值或表示通用指针类型。
控制语句关键字(12 个)
break:跳出循环或switch语句。
case:switch语句中的分支标签。
continue:跳过本次循环剩余代码进入下一次循环。
default:switch语句中匹配失败时执行的分支。
do:用于do - while循环。
else:if语句条件不成立时执行的分支。
for:构成for循环。
goto:无条件跳转语句。
if:条件判断语句。
return:从函数返回值或结束函数。
switch:用于多分支选择结构。
while:构成while循环。
存储类型关键字(4 个)
auto:声明自动变量,是局部变量默认存储类型。
extern:声明外部变量或函数。
register:建议编译器将变量存储在寄存器。
static:修饰局部变量保持值或限制全局变量 / 函数作用域。
其他关键字(4 个)
const:定义常量。
sizeof:计算数据类型或变量占用字节数。
typedef:为数据类型定义新名称。
volatile:告诉编译器变量值可能在程序控制流外改变。
32 个关键字的大概用法
数据类型关键字(12 个)
char
:用于声明字符型变量,通常用来存储单个字符,例如char c = 'a';
,这里定义了一个字符变量c
并初始化为字符a
。
double
:用于声明双精度浮点型变量,它能表示比float
更精确的小数数值,如double pi = 3.1415926;
。enum
:用于定义枚举类型,枚举是一种用户自定义的数据类型,它允许定义一组命名的整数常量。- 例如:
enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}; enum Weekday today = Monday;
float
:声明单精度浮点型变量,用来存储带有小数部分的数值,像float height = 1.75f;
(注意这里的f
后缀表示单精度浮点数)。int
:声明整型变量,是最常用的数据类型之一,用于存储整数,例如int num = 10;
。long
:可以用于声明长整型变量,有long int
和long long int
两种形式。long int
通常用于表示范围比int
更大的整数,long long int
能表示的范围则更大。例如long long bigNumber = 123456789012345LL;
(这里的LL
后缀用于明确表示这是一个long long int
类型的常量)。short
:声明短整型变量,用于存储相对较小范围的整数,它占用的内存空间比int
类型小,如short count = 5;
。signed
:用于修饰有符号整数类型,如signed int
,表明变量可以存储正数、负数和零。在默认情况下,int
等类型是有符号的,所以signed
关键字有时候可以省略。struct
:用于定义结构体类型,结构体允许将不同类型的数据成员组合在一起,形成一个新的数据类型。例如:struct Student { char name[20]; int age; float score; }; struct Student stu;
union
:定义联合体类型,联合体和结构体类似,但联合体的所有成员共享同一块内存空间,在某一时刻,联合体只能存储其中一个成员的值。例如:-
union Data { int i; float f; char c; }; union Data data;
unsigned
:用于修饰无符号整数类型,如unsigned int
,这种类型的变量只能存储非负整数(0 和正数),其表示的正数范围是有符号类型的两倍。例如unsigned int positiveNum = 100U;
(U
后缀表示无符号整数常量)。void
:主要有两种用途。一是用于函数返回值,表示函数不返回任何值;二是用于指针,表示通用指针类型。例如void function(void);
声明了一个没有返回值且没有参数的函数。 控制语句关键字(12 个)break
:用于跳出循环(for
、while
、do - while
)或者跳出switch
语句。例如在for
循环中:-
for (int i = 0; i < 10; i++) { if (i == 5) { break; } printf("%d ", i); }
这个程序会在
i
等于 5 时跳出循环,只会输出 0 - 4。 case
:用于switch
语句中,是switch
分支的标签。例如:int choice = 2; switch (choice) { case 1: printf("You selected option 1"); break; case 2: printf("You selected option 2"); break; default: printf("Invalid option"); break; }
continue
:用于循环语句(for
、while
、do - while
)中,它会跳过本次循环中剩余的代码,直接进入下一次循环。例如:for (int i = 0; i < 5; i++) { if (i == 2) { continue; } printf("%d ", i); }
这个程序会输出 0、1、3、4,跳过了
i = 2
时的打印操作。default
:在switch
语句中,用于定义当switch
表达式的值与所有case
标签的值都不匹配时执行的分支。do
:用于构成do - while
循环,do - while
循环的特点是先执行一次循环体,然后再判断循环条件是否成立。例如:int num = 0; do { printf("%d ", num); num++; } while (num < 5);
else
:用于if
语句中,表示当if
条件不成立时执行的分支。也可以和if
一起用于嵌套的条件判断。例如:int a = 10; if (a > 20) { printf("a is greater than 20"); } else { printf("a is less than or equal to 20"); }
for
:用于构成for
循环,for
循环是一种非常灵活的循环结构,它有三个表达式:初始化表达式、条件表达式和更新表达式。例如:for (int i = 0; i < 10; i++) { printf("%d ", i); }
goto
:是无条件跳转语句,不过它的使用会使程序的结构变得复杂且难以理解,容易导致错误,所以在实际编程中应该谨慎使用。例如:int main() { int i = 0; label: printf("%d ", i); i++; if (i < 5) { goto label; } return 0; }
if
:用于条件判断,根据条件的真假来执行不同的代码块。可以单独使用,也可以嵌套使用。例如:int x = 5; if (x > 3) { printf("x is greater than 3"); }
return
:用于从函数返回一个值或者结束函数的执行。如果函数返回类型不是void
,则必须使用return
返回一个符合函数返回类型的值。例如:int add(int a, int b) { return a + b; }
switch
:用于多分支选择结构,根据表达式的值跳转到相应的case
标签处执行代码。while
:用于构成while
循环,只要条件表达式为真,就会一直执行循环体。例如:int j = 0; while (j < 3) { printf("%d ", j); j++; }
存储类型关键字(4 个)
auto
:是 C 语言中局部变量的默认存储类型,用于声明自动变量,这些变量在进入函数或代码块时创建,在离开函数或代码块时销毁。例如:void func() { auto int localVariable = 10; // 函数结束后localVariable自动销毁 }
extern
:用于声明外部变量或函数,表示变量或函数的定义在其他文件中。这对于在多个源文件之间共享变量和函数非常有用。例如,在一个文件main.c
中有:extern int globalVariable; int main() { globalVariable++; return 0; }
在另一个文件
other.c
中有int globalVariable = 0;
。register
:用于建议编译器将变量存储在寄存器中,以提高访问速度。不过这只是一个建议,编译器会根据实际情况决定是否将变量存储在寄存器中。例如:register int fastVariable;
static
:有两种主要用途。一是用于修饰局部变量,使局部变量在函数调用结束后仍然保留其值,下次调用函数时可以继续使用。二是用于修饰全局变量或函数,限制其作用域为当前文件,防止在其他文件中被访问。例如:void func() { static int staticVariable = 0; staticVariable++; printf("%d ", staticVariable); }
其他关键字(4 个)
const
:用于定义常量,被const
修饰的变量的值在初始化后不能被修改。例如const int MAX_VALUE = 100;
。sizeof
:是一个运算符,用于计算数据类型或变量所占用的字节数。例如printf("%zu", sizeof(int));
会输出int
类型占用的字节数。typedef
:用于为现有数据类型定义一个新的类型名。例如typedef int MyInt;
之后就可以使用MyInt
来代替int
声明变量,如MyInt num = 5;
。volatile
:用于告诉编译器,变量的值可能会在程序的控制流之外被改变,例如被硬件或者其他线程修改。这样编译器就不会对该变量进行某些优化。例如在嵌入式系统中,访问硬件寄存器时可能会用到。
-
c语言中的关键字到底需要头文件?
- 1.大多数关键字不需要头文件
- C 语言中的关键字是语言本身的一部分,它们是预定义的保留字,用于定义变量类型、控制程序流程等基本操作。例如,
int
、if
、for
等关键字在编译器的词法分析阶段就被识别,不需要包含任何头文件来使用它们。 - 2.部分关键字在特定用法下可能涉及头文件
-
sizeof
关键字(从某种意义上涉及头文件) sizeof
是一个操作符,它用于计算数据类型或变量所占用的字节数。虽然它本身是关键字,但当用于一些复杂的数据类型(如结构体等)时,可能需要包含相应的头文件(struct.h
)来定义这些数据类型。- 例如,如果有一个结构体定义在一个头文件
struct.h
中:// <struct.h> struct MyStruct { int a; char b; };
在另一个 C 文件中使用
sizeof
来计算这个结构体的大小:#include<struct.h> int main() { struct MyStruct s; int size = sizeof(s); return 0; }
-
3.这里就需要包含
struct.h
头文件来正确使用sizeof
typedef
关键字(可能涉及头文件) typedef
用于为现有数据类型定义一个新的类型名。如果新定义的类型是基于其他自定义的数据类型(如结构体、枚举等),而这些数据类型是在其他头文件中定义的,那么就需要包含相应的头文件。- 例如,定义一个新的类型
MyIntArray
代表int
数组: - 操作符计算结构体
MyStruct
的大小。typedef int MyIntArray[10];
- 但如果是要定义一个基于其他头文件中定义的结构体的新类型,比如有一个头文件
person.h
定义了struct Person
:// <person.h> struct Person { char name[20]; int age; };
- 要在另一个文件中使用
typedef
基于struct Person
定义新类型,就需要包含person.h
:#include<person.h> typedef struct Person MyPerson;