static 与 extern
1. static和extern
这是我们C语言中的两个关键字,是用来修饰变量和函数。
1)static和extern修饰局部变量的效果
2)static和extern修饰全局变量的效果
3)static和extern修饰函数的效果
2. static修饰局部变量的效果
1)如果我们的局部变量被static修饰,这个变量就叫做静态变量。
2)静态变量不再存储在栈区,而是存储在常量区。
3)当函数执行完毕之后,这个静态变量不会被回收。下次再执行函数的时候,就会拿来继续使用。
4)static修饰的静态变量,函数结束不会被回收,仍然存在,函数无论执行多少次,这个静态变量只有1份。
3. extern不能修饰局部变量!
4. 全局变量
1)写1个函数,最完整的步骤应该分两步:
—> 先写函数的声明
—> 再写函数的实现
2)我们写1个全局变量,最完整的步骤应该也分为两步:
—> 先写全局变量的声明
只定义全局变量,而不赋值,这个就叫做全局变量的声明。
int num;
—> 再写全局变量的定义
定义全局变量并初始化,也叫作全局变量的实现。
int num = 10;
这个时候,全局变量的声明可以放在使用这个全局变量的前面,全局变量的定义可以放在使用全局变量的后面。
这个时候,仍然可以正常取值。
3)全局变量只有声明,没有定义,那么这个时候编译器会自动去帮助我们实现这个全局变量。
也就是自动的将这个全局变量初始化为0。
4)全局变量也可以只有定义,而没有声明,但是这个时候,这个全局变量的定义必须要在使用这个全局变量之前。
5. 其他模块写全局变量的注意问题:
1)全局变量的声明要写在.h文件中
2)全局变量的实现要写在.c文件中
3)如果将这个全局变量定义在模块当中,这个全局变量就必须要使用static或者extern来修饰!
注意:
如果定义在模块中的的全局变量,使用extern修饰,这个模块中的全局变量,就可以跨模块访问!
如果定义在模块中的的全局变量,使用static修饰,这个模块中的全局变量,就只能在当前模块访问!其他模块无法取到该模块中的这个全局变量。
6. static和extern修饰函数
1)如果函数被extern修饰,那么这个函数可以跨模块调用。
2)如果函数被static修饰,那么这个函数只能在当前模块中调用,无法跨模块调用!
如果函数没有写static或者extern修饰,那么这个函数默认就是extern,可以跨模块访问!
|
|