Язык программирования C

Скачать в pdf «Язык программирования C»

4.6. Статические переменные


Переменные sp и val в файле stack, с, а также buf и bufp в файле getch.c предназначены для внутреннего использования функциями в соответствующих файлах кода; всем остальным частям программы доступ к ним закрыт. Если объявление внешней переменной или функции содержит слово static, ее область действия ограничивается данным файлом исходного кода — от точки объявления до конца. Таким образом, внешние статические переменные— это механизм сокрытия имен наподобие buf и bufp в паре функций getch-ungetch, которые должны быть внешними, чтобы использоваться совместно, но не должны быть доступны за пределами указанных функций.


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


static char buf[BUFSIZE]; /* буфер для ungetch */


static int bufp =0;    /* следующая свободная позиция в buf */


int getch(void) (…)


void ungetch(int c) { … }


Тогда никакая другая функция не сможет обратиться к переменным buf и bufp, и не возникнет конфликта, если в других файлах программы будут употребляться такие же имена. Аналогично можно скрыть и переменные sp и val, объявив их статическими, чтобы только функции push и pop могли ими пользоваться для операций со стеком.


Чаще всего внешними статическими объявляются переменные, но такое объявление применимо и к функциям. Обычно имена функций являются глобальными и видимыми в любой части программы. Но если функцию объявить статической (static), ее имя будет невидимо за пределами файла, в котором она объявлена.


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

Скачать в pdf «Язык программирования C»