这里是一些调整后的代码,用于显示变量定义的位置之间的差异:
(来自:What does "static" mean?)
#include <stdio.h>
//static int sa = 10;
void func1()
{
int a = 10;
static int sa = 10;
a += 5;
sa += 5;
printf("func 1: a = %d, sa = %d\n", a, sa);
}
void func2()
{
int a = 10;
static int sa = 10;
a += 5;
sa += 5;
printf(" func2 : a = %d, sa = %d\n", a, sa);
}
int main()
{
int i,j;
for (i = 0; i < 10; ++i){
func1();
}
for (j = 0; j < 10; j++)
{
func2();
}
}
产生:
func 1: a = 15, sa = 15
func 1: a = 15, sa = 20
func 1: a = 15, sa = 25
func 1: a = 15, sa = 30
func 1: a = 15, sa = 35
func 1: a = 15, sa = 40
func 1: a = 15, sa = 45
func 1: a = 15, sa = 50
func 1: a = 15, sa = 55
func 1: a = 15, sa = 60
func2 : a = 15, sa = 15
func2 : a = 15, sa = 20
func2 : a = 15, sa = 25
func2 : a = 15, sa = 30
func2 : a = 15, sa = 35
func2 : a = 15, sa = 40
func2 : a = 15, sa = 45
func2 : a = 15, sa = 50
func2 : a = 15, sa = 55
func2 : a = 15, sa = 60
同时
#include <stdio.h>
static int sa = 10;
void func1()
{
int a = 10;
// static int sa = 10;
a += 5;
sa += 5;
printf("func 1: a = %d, sa = %d\n", a, sa);
}
void func2()
{
int a = 10;
//static int sa = 10;
a += 5;
sa += 5;
printf(" func2 : a = %d, sa = %d\n", a, sa);
}
生产
func 1: a = 15, sa = 15
func 1: a = 15, sa = 20
func 1: a = 15, sa = 25
func 1: a = 15, sa = 30
func 1: a = 15, sa = 35
func 1: a = 15, sa = 40
func 1: a = 15, sa = 45
func 1: a = 15, sa = 50
func 1: a = 15, sa = 55
func 1: a = 15, sa = 60
func2 : a = 15, sa = 65
func2 : a = 15, sa = 70
func2 : a = 15, sa = 75
func2 : a = 15, sa = 80
func2 : a = 15, sa = 85
func2 : a = 15, sa = 90
func2 : a = 15, sa = 95
func2 : a = 15, sa = 100
func2 : a = 15, sa = 105
func2 : a = 15, sa = 110
摘要 cmets(来自原始参考):
What does "static" mean?
静态定义的局部变量在
函数调用。换句话说,它们是全局变量,但作用域
到定义它们的本地函数。
静态全局变量在 C 文件之外不可见,它们
中定义。
静态函数在它们所在的 C 文件之外不可见
中定义。