Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 3).doc
Скачиваний:
138
Добавлен:
15.04.2015
Размер:
1.34 Mб
Скачать

Локальные переменные в функции Main()

Все сказанное до сих пор о свойствах локальных переменных внутри функций относится в полной мере и к функции main(). Вообще говоря, main() — это такая же функция, как и другие. Единственное различие состоит в том, что она вызывается операционной системой при запуске программы, и после завершения программы управление снова передается в операционную систему.

Это означает, что локальные переменные, определенные в функции main(), создаются при запуске программы и существуют до самого ее завершения. В силу этого понятие статической переменной, сохраняющей свое значение между вызовами main(), не имеет смысла: переменная не может существовать в промежутках между запусками программы. Поэтому внутри main() не существует различия между автоматическими и статическими локальными переменными. Можно, конечно, с полным правом объявить локальную переменную в функции main() как статическую, но это не будет иметь никакого реального эффекта.

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

Переменные-параметры всегда имеют начальное значение, переданное как аргумент в функцию. Поэтому понятия "статический" и "автоматический" не имеют никакого смысла в приложении к ним.

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

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

Рассмотрим пример:

Void func1(void)

{

register int x;

/* Код функции */

}

Ключевое слово register — это предложение, а не категорическое распоряжение. Преимущества регистровых переменных наиболее ярко проявляются тогда, когда эти переменные используются в программе очень часто, например, как счетчики циклов.

Ключевое слово register может употребляться только с простыми числовыми переменными, но не с массивами или структурами. Его также нельзя совмещать с объявлением переменной как статической или внешней. Нельзя и определить указатель на регистровую переменную.

В опциях интегрированной среды есть возможность задавать способы использования регистровых переменных:

  • не использовать вообще;

  • использовать только тогда, когда есть ключевое слово register;

  • по усмотрению компилятора.

Глобальные переменные

Глобальные переменные - это переменные, объявленные вне какой-либо функции в том числе, и вне функции main(). В отличие от локальных переменных глобальные переменные могут быть использованы в любом месте программы, но перед их первым использованием они должны быть объявлены.

Область действия глобальной переменной – распространяется на весь файл исходного кода, в котором она объявлена.

Глобальные переменные рекомендуется инициализировать, даже при том, что они по умолчанию получают начальное значение 0.

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

Использование глобальных переменных имеет свои недостатки:

  • они занимают память в течение всего времени работы программы;

  • использование глобальных переменных делает функции менее общими и затрудняет их использование в других программах;

  • использование внешних переменных делает возможным появление ошибок из-за побочных явлений. Эти ошибки, как правило, трудно отыскать.

Ключевое слово extern

Если в функции используется глобальная переменная, то согласно хорошему стилю программирования ее следует объявить внутри этой функции с помощью ключевого слова extern в следующем виде:

extern тип имя;

Здесь тип обозначает тип переменной, а имя— ее идентификатор.

Декларация extern необходима, если объявление переменной находится не в одном программном модуле.

Декларацией extern фактически говорится: «Эта функция использует переменную такого-то типа и с таким-то именем, определенную где-то в другом месте».

Глобальные статические переменные

Глобальную переменную можно сделать статической, добавив к ее объявлению слово static:

static float rate;

main()

{

/* Код программы */

}

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

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