关键字

目录

static

extern

define 宏


static

可用在局部变量 全局变量 函数

1.局部变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void test()//进函数a生命周期开始
{
int a = 1;//a局部变量,再进来a还是1,循环往复
a++;//2
printf("%d", a);//2222222222
}//出函数a就销毁了还给操作系统
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int sum(int a)
{
int c = 0;
static int b = 3;
c += 1;
b += 2;
return (a + b + c);
}
int main()
{
int i;
int a = 2;
for (i = 0; i < 5; i++)
{
printf("%d,", sum(a));
}
}

 a是main函数里开辟的局部变量,c是sum里面的局部变量,在出sum中就会销毁,而b是被static修饰的静态变量,不会因为出sum就销毁,

 static修饰局部变量,改变了变量的储存类型,所以这个变量就失去了局部变量的特性,(栈区->静态区)使得静态的局部变量出了自己的作用域也不会销毁,相当于改变了他的生命周期

abc
0251
1271
2291
32111
42131

结果是8 10 12 14 16 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void test()
{
static int a = 1;//上一次出的时候a没有销毁,可以根据结果推测,每一次调用test函数使用的a是上一次留下的,
a++;//2
printf("%d", a);//234567891011
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}

return 0;
}

 

 在另一个文件定义的变量不能直接使用,要声明
extern int g;//使用之前声明,extern是一个关键字,专门用来声名外部符号的 

static修饰全局变量,
 一个全局变量在整个过程的其他文件内部使用,是因为全局变量具有外部链接属性,当一个全局变量被static修饰的时候,整个变量
当一个全局变量被static修饰的时候,整个变量就变成了内部链接属性,使得全局变量只能在自己所在的源文件内部使用,其他文件不能用,
static int g = 10; 

1
2
3
4
5
6
7
8
9
10
11
12
在另一个文件定义的变量不能直接使用,要声明
test.c
#include<stdio.h>
extern int g;//使用之前声明,extern是一个关键字,专门用来声名外部符号的
int main()
{
printf("%d", g);//10
return 0;
}

g是main.c另一个文件中定义的全局变量
int g=10;

 同理修饰函数和修饰全局变量也是一样的

1
2
3
4
5
6
7
8
9
10
11
12
13
extern int add(int a, int b);
int main()
{
int a = 10, b = 20;
add(a, b);
return 0;
}

//test.c里面的
int add(int a, int b)
{
return a + b;
}

define定义宏

1
2
3
4
5
6
7
8
//定义宏
#define add(a,b)((x)+(y))
int main()
{
int a = 10, b = 20;
add(a, b);
return 0;
}

关键字
http://example.com/2021/10/22/关键字/
作者
Zevin
发布于
2021年10月22日
许可协议