здесь некоторые скорректированный код, чтобы показать различия между , где определены переменные: (от: 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
краткие комментарии (из исходной ссылке): What does "static" mean?
Статические определенные локальные переменные не теряют значения между FUNC . Другими словами, они являются глобальными переменными, но область действия к локальной функции они определены в.
Статические глобальные переменные не видны за пределами файла C они
определены в.
Статические функции не видны за пределами файла C они являются
определены в.
Возможный дубликат [Что означает «статический» в программе C?] (Http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program) – ameyCU
@ameyCU Это а не о чем этот вопрос. – Lundin
@ Lundin Думаю, ответ на этот вопрос ответ им. – ameyCU