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

Язык С
Строк программы, исключая математическое обеспечение Является учебным введением в центральную часть языка “C” Hачинаем. Единственный способ освоить новый язык Оператор FOR Набор полезных программ Подсчет символов Подсчет слов Функции Аргументы - вызов по значению Область действия: внешние переменные Резюме Константы Описания Преобразование типов До 9 и буквы от а до F Операции и выражения присваивания Старшинство и порядок вычисления Операторы и блоки Переключатель Цикл DO - WHILE Оператор CONTINUE Основные сведения Функции, возвращающие нецелые значения Еще об аргументах функций Правила, определяющие область действия Статические переменные Блочная структура Рекурсия Указатели и адреса Указатели и массивы Адресная арифметика Указатели символов и функции Указатели - не целые До 12, а не от 0 до 11. Так как за экономию памяти у нас пока не награждают, такой способ проще, чем подгонка индек-сов Инициализация массивов указателей Указатели на функции Структуры Структуры и функции Указатели на структуры Мы продемонстрируем, как правильно выполнить эту задачу Поля Определение типа Обращение к стандартной библиотеке Форматный вывод - функция PRINTF Форматный ввод - функция SCANF Форматное преобразование в памяти Обработка ошибок - STDERR и EXIT Обращение к системе Низкоуровневый ввод/вывод - операторы READ и WRITE Произвольный доступ - SEEK и LSEEK Пример - распечатка справочников Пример - распределитель памяти Константы Синтаксическая нотация Преобразования Первичные выражения Унарные операции Аддитивные операции Операция присваивания Спецификаторы типа Описание структур и объединений Инициализация TYPEDEF Оператор SWITCH Внешнее определение функции Область действия внешних идентификаторов Неявные описания Явные преобразования указателей Анахронизмы Операторы
439386
знаков
0
таблиц
0
изображений

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

 

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

памяти, в дополнении к автоматическим переменным и 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 , стоящим перед обычным описани-

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

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

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


·     90 -

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

4.7. Регистровые переменные.

 

Четвертый и последний класс памяти называется регистро-

вым. Описание REGISTER указывает компилятору, что данная пе-

ременная будет часто использоваться. Когда это возможно, пе-

ременные, описанные как REGISTER, располагаются в машинных

регистрах, что может привести к меньшим по размеру и более

быстрым программам. Описание REGISTER выглядит как

 

REGISTER INT X;

REGISTER CHAR C;

и т.д.; часть INT может быть опущена. Описание REGISTER мож-

но использовать только для автоматических переменных и фор-

мальных параметров функций. В этом последнем случае описания

выглядят следующим образом:

 

F(C,N)

REGISTER INT C,N;

{

REGISTER INT I;

...

}


·     91 -

 

На практике возникают некоторые ограничения на регистро-

вые переменные, отражающие реальные возможности имеющихся

аппаратных средств. В регистры можно поместить только нес-

колько переменных в каждой функции, причем только определен-

ных типов. В случае превышения возможного числа или исполь-

зования неразрешенных типов слово REGISTER игнорируется.

Кроме того невозможно извлечь адрес регистровой переменной

(этот вопрос обсуждается в главе 5). Эти специфические огра-

ничения варьируются от машины к машине. Так, например, на

PDP-11 эффективными являются только первые три описания

REGISTER в функции, а в качестве типов допускаются INT, CHAR

или указатель.

 


Информация о работе «Язык С»
Раздел: Информатика, программирование
Количество знаков с пробелами: 439386
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
48443
0
0

... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...

Скачать
43709
0
0

... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...

Скачать
39778
0
1

... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...

Скачать
64931
0
0

... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...

0 комментариев


Наверх