Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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





 

Статические переменные представляют собой третий класс

памяти, в дополнении к автоматическим переменным и EXTERN, с

которыми мы уже встречались.

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

внешними. Внутренние статические переменные точно так же,

как и автоматические, являются локальными для некоторой фун-

кции, но, в отличие от автоматических, они остаются сущест-

вовать, а не появляются и исчезают вместе с обращением к

этой функции. это означает, что внутренние статические пере-

менные обеспечивают постоянное, недоступное извне хранение

внутри функции. Символьные строки, появляющиеся внутри функ-

ции, как, например, аргументы PRINTF, являются внутренними

статическими.

Внешние статические переменные определены в остальной

части того исходного файла, в котором они описаны, но не в

каком-либо другом файле. Таким образом, они дают способ

скрывать имена, подобные BUF и BUFP в комбинации

GETCH-UNGETCH, которые в силу их совместного использования

должны быть внешними, но все же не доступными для пользова-

телей GETCH и UNGETCH, чтобы исключалась возможность конф-

ликта. Если эти две функции и две переменные объеденить в

одном файле следующим образом

 

STATIC CHAR BUF[BUFSIZE]; /* BUFFER FOR UNGETCH */

STATIC INT BUFP=0; /*NEXT FREE POSITION IN BUF */

 

GETCH() {...}

 

UNGETCH() {...}

 

то никакая другая функция не будет в состоянии обратиться к

BUF и BUFP; фактически, они не будут вступать в конфликт с

такими же именами из других файлов той же самой программы.

Статическая память, как внутренняя, так и внешняя, спе-

цифицируется словом STATIC, стоящим перед обычным описани-

ем. Переменная является внешней, если она описана вне какой

бы то ни было функции, и внутренней, если она описана внутри

некоторой функции.

 

Нормально функции являются внешними объектами; их имена

известны глобально. возможно, однако, объявить функцию как

STATIC; тогда ее имя становится неизвестным вне файла, в

котором оно описано.

В языке "C" "STATIC" отражает не только постоянство, но

и степень того, что можно назвать "приватностью". Внутренние

статические объекты определены только внутри одной функции;

внешние статические объекты /переменные или функции/ опреде-

лены только внутри того исходного файла, где они появляются,

и их имена не вступают в конфликт с такими же именами пере-

менных и функций из других файлов.

Внешние статические переменные и функции предоставляют

способ организовывать данные и работающие с ними внутренние

процедуры таким образом, что другие процедуры и данные не

могут прийти с ними в конфликт даже по недоразумению. Напри-

мер, функции GETCH и UNGETCH образуют "модуль" для ввода и

возвращения символов; BUF и BUFP должны быть статическими,

чтобы они не были доступны извне. Точно так же функции PUSH,

POP и CLEAR формируют модуль обработки стека; VAR и SP тоже

должны быть внешними статическими.

 

 

Date: 2015-09-17; view: 314; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию