Лексические основы языка C ++. Алфавит и лексемы языка C++. Операторы C++. Массивы и указатели, страница 3

#define     HI        “Hello”

#define     PI         3.141593

Другой способ задания символических целочисленных констант – использование типа enum. Например, в результате следующего объявления

enum error { OK, NO_OPEN, NO_CREATE, FALL = 5 }

будут получены константы с указанными в списке именами и значениями 0, 1, 2 и 5 соответственно.

1.6Время существования и область видимости переменных

            Время существования, или время жизни переменной, измеряется длительностью ее существования в программе:

·  локальное время жизни – это время существования переменной при выполнении блока, в котором она объявлена (блок – это часть кода программы, заключенная в фигурные скобки);

·  глобальное время жизни – это время существования переменной при выполнении всей программы.

            Область видимости – это часть кода программы, в которой идентификатор может быть использован для доступа к переменной. Область видимости может быть определена

·  до конца блока, в котором объявлена переменная;

·  до конца файла, в котором объявлена переменная.

Управлять временем существования и областью видимости переменных можно с помощью модификаторов класса памяти auto, register, static, extern.

Автоматическая  (auto) переменная или константа имеет локальную область действия и известна только внутри блока, в котором она определена. Для автоматической переменной выделяется временная память. Память выделяется при входе в блок, а при выходе из блока память, выделенная для переменной, считается свободной, т.е. переменная уничтожается. Если спецификатор класса памяти не указан, то переменная в блоке по умолчанию считается автоматической.

Регистровая (register) переменная хранится в регистре процессора. В случае отсутствия свободных регистров регистровая переменная становится автоматической.

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

Внешняя (extern) переменная является глобальной переменной. Спецификатор информирует компилятор, что переменная будет объявлена (без extern) в другом модуле, где ей и будет выделена память.

// модуль ext.h

void GetFloat ();                                 // прототип функции

// модуль ext.cpp

#include <iostream.h>

#include ”ext.h”

void GetFloat( )                                // реализация функции

{

 extern float f;                             // описание переменной f

 cin >> f;                               //ввод значения переменной f

}

// модуль ext_main.cpp

#include <iostream.h>

#include ”ext.cpp”

float f ;          //объявление переменной f и выделение памяти

void main()

{

  Getfloat(); cout<<f;

}

В таблице 1.3 приведены характеристики переменных, объявленных с использованием модификатора выделения памяти.

Таблица 1.3 Характеристики переменных

Модификатор

класса памяти

Место объявления переменной

Область видимости

Время существования

Характеристики

не указан (по умолчанию) STATIC

вне функции

до конца файла

глобальное

глобальная переменная файла

STATIC

вне функции

до конца файла

глобальное

глобальная переменная файла

STATIC

в функции

до конца блока

локальное

сохраняемая локальная переменная

не указан (по умолчанию AUTO)

в функции

до конца блока

локальное

локальная переменная

AUTO

запрещено вне функции

AUTO

в функции

до конца блока

локальное

локальная переменная

REGISTER

В функции

до конца блока

локальное

быстрая локальная переменная

REGISTER

запрещено вне функции

EXTERN

в функции

до конца файла

глобальное

глобальная переменная программы

EXTERN

вне функции

до конца файла

глобальное

глобальная переменная программы