道滘镇网站建设,奇葩网站100个,做动态图的网站,科技展厅设计方案在C语言中#xff0c;static有3个作用#xff1a;
#xff08;1#xff09;在函数体#xff0c;一个被声明为静态的变量在这一函数体内被调用的过程中维持其值不变。
#include stdio.hvoid test(void)
{static int i 0;printf(%d\n, i);
}int main…在C语言中static有3个作用
1在函数体一个被声明为静态的变量在这一函数体内被调用的过程中维持其值不变。
#include stdio.hvoid test(void)
{static int i 0;printf(%d\n, i);
}int main(void)
{test();test();test();return 0;
}
如果不使用static修饰 int i结果为。使用后结果为。 2在模块内一个被声明为静态的变量可以被模块内所有的函数访问但不能被模块外其他函数访问。它是一个本地的全局变量。
在test.c里面声明一个全局变量
int a 100;
在main.c中也声明一个全局变量
int a 200;
编译器报错
因为a是非静态全局变量作用域是整个源程序而静态全局变量的作用域限制在定义该变量的源文件内有效。
test.c里面的变量修改为
static int a 100;
编译通过。 3在模块内一个被声明为静态的函数只可被这一模块内的其他函数调用这个函数被限制在声明它的模块的本地范围内使用。
比如static_test.h 的内容为
#ifndef STATIC_TEST_H
#define STATIC_TEST_Hstatic void static_func(void);void func(void);#endif
static_test.c的内容为
#include static_test.h
#include stdio.hstatic void static_func(void)
{printf(hello world\n);
}void func(void)
{static_func();
}
在main.c中去调用static_func()编译器会报错。而static_test.c里调用static_func()是可以的。从而说明static修饰的函数只能在模块static_test.c里面调用不允许模块外调用。
头文件中static_func()不使用static修饰也可以编译通过但是依照代码规范的要求必须使用static修饰以增加阅读性头文件使用static修饰表明了该函数不允许使用者调用。