static 是 静态的 的意思,可以⽤来:
• 修饰局部变量
• 修饰全局变量
- //代码1 #include <stdio.h>
- void test()
- {
- int i = 0;
- i++;
- printf("%d ", i);
- }
- int main()
- {
- int i = 0;
- for(i=0; i<5; i++)
- {
- test();
- }
- return 0; }
- //代码2 #include <stdio.h>
- void test()
- {
- //static修饰局部变量
- static int i = 0;
- i++;
- printf("%d ", i);
- }
- int main()
- {
- int i = 0;
- for(i=0; i<5; i++)
- {
- test();
- }
- return 0; }
这里是在一个大文件中有多个源文件
代码1
add.c
int g_val = 2018;
test.c
- #include
- extern int g_val;
- int main()
- {
- printf("%d\n", g_val);
- return 0;
- }
代码2
add.c
static int g_val = 2018;
test.c
- #include
- extern int g_val;
- int main()
- {
- printf("%d\n", g_val);
- return 0;
- }
对比上述两个不同的代码,我们可以得到结论:
static 修饰函数与修饰全局变量是一样的道理的。
代码1
add.c
- int Add(int x, int y)
- {
- return x+y;
- }
test.c
- #include
- extern int Add(int x, int y);
- int main()
- {
- printf("%d\n", Add(2, 3));
- return 0; }
代码2
add.c
- static int Add(int x, int y)
- {
- return x+y;
- }
test.c
- #include
- extern int Add(int x, int y);
- int main()
- {
- printf("%d\n", Add(2, 3));
- return 0; }
对比运行结果有:代码1是能够正常运⾏的,但是代码2就出现了链接错误。
结论: