Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
16.02.2016
Размер:
1.18 Mб
Скачать

Внешние переменные и функции

Если программа состоит из нескольких модулей, некоторые переменные могут использоваться для передачи значений из одного файла в другой. При этом некоторая переменная объявляется глобальной в одном модуле, а в других файлах, в которых она должна быть видима, производится ее объявление с использованием модификатора extern. Если объявление внешней переменной производится в блоке, она является локальной.

В отличие от предыдущих, этот модификатор сообщает, что первоначальное объявление переменной производится в каком-то другом файле. Рассмотрим пример использования внешней переменной:

// файл myheader.h void ChangeFlag(void);

// файл rayfunction.cpp

extern bool Flag;

void ChangeFlag(void)

{

Flag = !Flag;

}

#include <iostream.h>

#finclude "myheader.h"

extern bool Flag;

int main()

{

ChangeFlag() ;

if(Flag)

cout « "Сейчас TRUE\n"; else

cout « " Сейчас FALSE\n"; return 0;

}

Сначала в файле myheader.h объявляется функция ChangeFlag (). Далее в файле myfunction. срр следует объявление глобальной логической переменной Flag и определяется реализация тела функции ChangeFlag () и наконец в главном модуле подключается заголовочный файл myheader.h и переменная Flag описывается как внешняя (extern). Поскольку описание функции ChangeFlag () включается в главный модуль директивой #include "myheader.h", данная функция доступна в теле функции main().

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

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

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

В качестве примера рассмотрим реализацию счетчика вызовов некоторой функции:

#include <iostream.h>

int Count(void);

int main()

{

int result;

for (int i=0; i<30; i++) result = Count();

cout « result;

return 0;

}

int Count(void)

{

static short counter = 0;

counter++;

return counter;

}

Здесь главная функция в цикле (30 раз подряд) вызывает функцию Count(), которая содержит статическую переменную counter. Как видно из примера, начальная инициализация этой переменной нулем выполнится только один раз, при первом вхождении в тело функции. Поскольку значение переменной сохраняется между вызовами функции, на печать будет выведено число 30.

Переменные класса volatile

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

Пример объявления таких переменных приведен ниже:

Соседние файлы в папке ЯзыкС++Глушаков