Статика в программировании на C

Static C Programming



В этом руководстве мы объясним ключевое слово static, применив его к переменным и функциям. Статический - это ключевое слово, используемое в программировании на C, и его можно применять, используя следующий синтаксис:

статический {тип данных} {имя переменной}







Статические локальные переменные

Когда переменная в функции статична, переменная сохраняет свое значение между вызовами функции.



//Example1.c

#включают

intfun1()
{

intсчитатьзнак равно0;
считать++;
возвращениесчитать;
}

intfun2()
{
статический intсчитатьзнак равно0;
считать++;
возвращениесчитать;
}

intглавный()
{
printf ('fun1 1-й вызов возвращается:% d п',fun1());
printf ('fun1 2-й вызов возвращается:% d п п',fun1());

printf ('fun2 1-й вызов возвращается:% d п',fun2());
printf ('fun2 2-й вызов возвращается:% d п',fun2());

возвращение 0;
}


В примере 1.c у нас есть две функции: fun1 () а также fun2 () . В fun1 () , мы объявляем одну переменную (count) и инициализируем ее значением 0. Затем мы увеличиваем значение переменной count и возвращаем результирующее значение. С использованием главный() , мы называем fun1 () дважды, и каждый раз возвращается значение 1, потому что переменная count очищается при вызове fun1 () завершено. В fun2 () мы объявили переменную count как статическую переменную. Таким образом, его ценность сохраняется. С использованием главный() , мы называем fun2 () дважды: в первый раз возвращается значение 1, а во второй раз возвращается значение 2.



Статические глобальные переменные

Статическая глобальная переменная ведет себя так же, как и другие глобальные переменные, но к ней нельзя получить доступ из другой программы C.





Статические функции

В C функции по умолчанию являются глобальными. Однако, если мы объявляем статическую функцию, тогда функция будет локальной и к ней нельзя будет получить доступ из другой программы C.

Инициализация статических переменных

Если статическая переменная не инициализирована явно, она инициализируется как 0.



//Example2.c

#включают

intглавный()
{
статический intя;

printf ('Значение i:% d п',я);

возвращение 0;
}


В Example2.c мы объявили статическую переменную i, которая не инициализирована. Однако, поскольку переменная статична, она автоматически инициализируется значением 0.

Важно отметить, что статическая переменная должна быть инициализирована константным литералом; мы не можем использовать возвращаемое значение функции для инициализации статической переменной.

//Example3.c

#включают

intfun1()
{
возвращение 5;
}

intглавный()
{
статический intязнак равноfun1();
printf ('Значение i:% d п',я);
возвращение 0;
}


В Example3.c мы пытаемся инициализировать статическую переменную, используя возвращаемое значение fun1 () . Однако, как видите, при компиляции кода возвращается ошибка.

Резюме

Время жизни статической переменной и время жизни программы равны.

Если статическая переменная не инициализирована, она примет значение по умолчанию 0.

Ни глобальная статическая переменная, ни статическая функция недоступны из программы, отличной от той, в которой она была определена.