Статический


staticявляется ключевым словом в языке программирования C. Его можно использовать с переменными и функциями.

Что такое статическая переменная?

По умолчанию переменные являются локальными по отношению к области, в которой они определены. Переменные можно объявить как статические, чтобы расширить их область действия до файла, содержащего их. В результате к этим переменным можно получить доступ из любого места внутри файла.

Рассмотрим следующий сценарий - мы хотим посчитать бегунов, участвующих в забеге:

#include<stdio.h>
int runner() {
    int count = 0;
    count++;
    return count;
}

int main()
{
    printf("%d ", runner());
    printf("%d ", runner());
    return 0;
}

Мы увидим, что countон не обновляется, потому что он удаляется из памяти, как только функция завершается. Однако если staticиспользуется:

#include<stdio.h>
int runner()
{
    static int count = 0;
    count++;
    return count;
}

int main()
{
    printf("%d ", runner());
    printf("%d ", runner());
    return 0;
}

Что такое статическая функция?

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

Синтаксис выглядит так:

static void fun(void) {
   printf("I am a static function.");
}

Статический или глобальный?

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

Упражнение

В этом упражнении попробуйте найти сумму некоторых чисел с помощью ключевого слова static. Не передавайте в функцию никакие переменные, представляющие промежуточную сумму .sum()