在C中定义一个变量将意味什么?
1、规定变量的取值范围。
2、规定变量的操作
3、规定变量的作用域(或者生命周期、或者访问控制)
4、规定了变量的存储方式(或者存储格式)。
在纯C中Static有两个作用(不考虑C++以及二则混合使用):
1、Static修饰局部变量:该变量能在所定义的函数中共享(参考例一)。
2、Static修饰全局变量或函数:该变量或函数只在所定义的文件中可见(参考例一)。
例一:
void foo(void)
{ static int i = 10; int j = 10; i += 1; j += 1; printf("i = [%d], j = [%d]\n",i,j); } int main(int argc, char *argv[]) { int i ; for (i = 0; i < 10; i++) foo(); return 0; }
output:
i = [11], j = [11]
i = [12], j = [11]
i = [13], j = [11]
i = [14], j = [11]
i = [15], j = [11]
i = [16], j = [11]
i = [17], j = [11]
i = [18], j = [11]
i = [19], j = [11]
i = [20], j = [11]
例二:
foo.c void foo1(void) { static int i = 10; int j = 10; i += 1; j += 1; printf("i = [%d], j = [%d]\n",i,j); } static void foo2(void) { static int i = 10; int j = 10; i += 1; j += 1; printf("i = [%d], j = [%d]\n",i,j); }
main.c
int main(int argc, char *argv[]) { int i,j; for (i = 0; i < 10; i++) foo1(); for(j = 0; j < 10; j++) foo2(); // error: undefined reference to `foo2' // as main() can not acces the static mothed foo2() in foo.c file return 0; }