ТОР 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 функций. Не нашли, что искали? Воспользуйтесь поиском:
|