Справочная система C guide

Определение локальных переменных


Замечание 1 Постоянные переменные, сохраняемые в некоторой области памяти, инициализируются нулем, если явно не заданы начальные значения Временные переменные, значения которых сохраняются в стеке или регистре, не получают начального значения, если оно не описано явно.

Замечание 2 Все описания в блоке должны предшествовать первому оператору Автоматические переменные Пример

mt x, /* х - это автоматическая переменная */ }

Автоматическая переменная является временной, так как ее значение теряется при выходе из блока. Областью определения является блок, в котором эта переменная определена. Переменные, определенные в блоке, имеют приоритет перед переменными, определенными в охватывающих блоках.

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

Пример

{

register mt у;

}"

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

Формальные параметры

Примеры

mt func(x), int func(x) int x; register int x;

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

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

Пример

{ static int flag }

Статические переменные являются постоянными, так как их значения не теряются при выходе из функции. Любые переменные в блоке, кроме формальных параметров функции, могут быть определены как статические. Областью действия является блок.

Содержание раздела