5.关键字
一、常见的关键字
auto break case char const continue default do double else enum
extern float for goto if int long register return short signed
sizeof static struct switch typedef union unsigned void volatile while
二、常见关键字解释
1.extern
2.register 寄存器(大量被使用的数据想放在寄存器中)
3.signed 有符号的 如10 -0
4.unsigned 无符号的
5.union 联合体
6.extern 用来声明外部符合的
7.auto 自动的,每个局部变量都是auto来修饰的,通常会被省略
三、需要了解一下
1.寄存器,详解
高速缓存https://www.bilibili.com/video/BV1U44y1y7xN?p=20&spm_id_from=pageDriver
第十分钟
2.typodef
用来取别名
typedef unsigned int u_int;
int main()
{
unsigned int num1 = 100;
u_int num1 = 100;
}
3.static
1.举例,这是正常的函数
void test()
{
int a = 1; //此时的a是一个局部变量 出了函数体就会被销毁
a++;
printf("%d ", a); //打印结果为10个2
}
int main()
{
int i = 0;
while (i<10)
{
test();
i++;
}
return 0;
}
当我们将变量前加上static上时,便发生了质的改变
void test()
{
static int a = 1; //此时的a是成为了一个全局变量 出了函数体不会会被销毁
a++;
printf("%d ", a); //打印结果为2-11
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
分析一波,这里实际上根本的原因是因为static修饰了局部变量,更改了生命周期(本质上更改了变量的存储类型)

2.static的作用范围
首先在test1.c中定义一个全局变量
int g_val = 2021;
在test2.c中声明一下外部符合
extern g_val;
int main()
{
printf("%d\n", g_val);
return 0;
}
//该代码可以正常被执行
下面我们更改一下test1.c
statc int g_val = 2021;
test2.c不变
extern g_val;
int main()
{
printf("%d\n", g_val);
return 0;
}
//该代码不能正常被执行
分析一波
①static修饰了全局变量,使得这个全局变量只能在自己的源文件(也就是这个1.c)内部可以使用,但是其他源文件不能使用
②全局变量,在其他源文件内部可以被使用,是因为全局变量具有外链接属性。但是被static修饰之后,就要变成内部链接属性,其他源文件就不能链接到这个静态的全局变量了!
3.static声明函数
首先在test1中写上一个函数
int add(int x, int y)
{
return x + y;
}
在test2中
extern int add(int x, int y); //声明函数的数据类型 参数的数据类型即可
int main()
{
int a = 10;
int b = 20;
int sum = add(a, b);
printf("sum=%d\n", sum);
return 0;
}
//该函数可以正常运行
但是在函数前面加上static就不能正常运行了,同理
①static修饰了函数,使得这个函数只能在自己的源文件(也就是这个1.c)内部可以使用,但是其他源文件不能使用。
②但是被static修饰之后,就要变成内部链接属性,其他源文件就不能链接到这个静态的函数了!

浙公网安备 33010602011771号