Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Описания переменных и классы памяти




Описание переменных задается в виде:
[память] тип или тип [память] } и список описателей;

где память - это одно из ключевых слов auto, static, extern, register.

Автоматические переменные (auto) локальны по отношению к каждому блоку (составному оператору). При выходе из блока они уничтожаются, а при входе в блок – для них выделяется память. Статические переменные также локальны по отношению к блоку, но их значения сохраняются даже при выходе из блока и могут использоваться при повторном входе в блок.

Блок или составной оператор в Си ограничивается скобками {…}.

Внешние переменные, объявленные вне функции и на которые, возможно, ссылаются посредством extern, существуют и сохраняют свои значения на протяжении выполнения всей программы. Ключевое слово extern указывает, что переменная декларируется где-либо далее в файле или в другом файле (это указание компилятору и фактически в данном месте прграммы память под переменную не выделяется). Они могут использоваться для передачи значений между отдельно транслируемыми функциями. Фактически, они статически определены. Регистровые переменные хранятся в (быстрых) регистрах, если это возможно; они локальны в блоке и уничтожаются при выходе из блока. Эти переменные позволяют повысить скорость выполнения программы. Описание register выполнимо только при описании автоматических переменных и к формальным параметрам функции.

Пример

int func (a,b);

register int a,b;

{

register int i;

register char d;

….

}

Если указано register, то int можно опускать (int используется по умолчанию).

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

Список_описателей в декларациях для простых переменных содержит пары вида «имя-переменной инициатор», разделенные запятыми, где инициатор имеет вид:
«= выражение»

Инициатор задает начальные значения для объектов.

1. Все выражения для статических и внешних переменных (имеется в виду явно, без extern) должны быть константными выражениями или выражениями, сводящимися к адресам предварительно описанных переменных (для указательных переменных), при этом допускается смещение от них на величину, заданную константным выражением.

2. Автоматические и регистровые переменные могут инициироваться произвольными выражениями, включающими константы и предварительно описанные переменные и функции.

По умолчанию они не инициализуются и вначале содержат “мусор”.

По умолчанию статические и внешние переменные инициируются нулем - т.е. для int - это 0, для float i double это 0.0, для char - это ‘\0’.

Примеры

int i=1;

float x=3.1e-2, y=3.145;

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

 

Пример

В теле функции или внутри вложенного блока:

double y = func (CONST1)+10;

Описание корректно, если func уже описана и CONST1 константа или вместо CONST1 некоторая уже ранее описанная и инициированная переменная.

Для автоматических и регистровых, если инициатор не указан, то начальное значение не определено (“пусто”).

Ключевое слово static помимо указания статической переменной ограничивает еще и область видимости имени данным файлом. Static применимо и к ltrkfhfwbzv функций.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных