1.static定义的变量只能在当前文件使用吗?
不一定。
static定义的全局变量:作用域是当前文件
static定义的局部变量:作用域是该函数
那么下面这段代码可以将static 定义的局部变量传递出去:
#include<stdio.h>
int temp;//定义全局变量
int send(int a,int b)
{
static int c;局部变量
c= a+b;
temp=c;//局部变量的值传递
return temp;
}
//主函数
int main(void)
{
printf("%d",send(1,2));//得到了静态局部变量的值
return 0;
}
当然这个只是我自己的理解,这样的用法应该用的不多吧,既然要用局部变量的值。为何还要用一个全局变量去传递呢,有点多此一举。
2static关键字的普遍理解
2.1 修饰变量
- 1静态全局变量
例如文件a.c中有如下内容:
static int a;
int fun1(int m , int n);
int fun2(int m);
- 1-1、则这个变量a只能在当前文件中使用,而不能被其他文件如b.c或者d.c等文件直接调用;
- 1-2、这个变量会保留本次的值直到它下一次被改变
例如文件b.c中有如下内容:
int fun1(int m , int n);
{
static int a=5;
return (a+m+n);
}
int fun2(int m);
int fun2(int m);
- 2静态局部变量
- 2-1、则这个变量a只能在当前函数中使用,而不能当前文件其他函数如fun2(),fun3()等直接调用;
- 2-2、这个变量会保留本次的值直到它下一次被改变
2.2修饰函数
有a.c中的一个静态函数 如下:
static fun(int a);
则该函数只能在a.c中被其它函数调用,而不能被例如b.c,d.c等a.c之外的函数调用