Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Основы программирования на C++.doc
Скачиваний:
148
Добавлен:
02.05.2014
Размер:
872.96 Кб
Скачать

Об"явление функции на внешнем и внутреннем уровнях

Функции могут быть об"явлены со спецификаторами класса па­мяти static или extern. Функции всегда имеют глобальное время жизни.

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

видима только в пределах исходного файла, в котором она определя­ется. Любая функция в том же самом исходном файле может вызвать функцию static, но функции static из других файлов нет. Функция static с тем же самым именем может быть об"явлена в другом исход­ном файле.

Функции, об"явленные как extern видимы в пределах всех ис­ходных файлов, которые составляют программу. Любая функция может вызвать функцию extern.

Об"явления функций, в которых опущен спецификатор класса памяти, считаются по умолчанию extern.

Инициализация

В об"явлении переменной может быть присвоено начальное зна­чение посредством инициализатора. Величина или величины инициали­затора присваиваются переменной.

Синтаксически, записи инициализатора предшествует знак рав­но (=)

=<initializer>

Могут быть инициализированы переменные любого типа. Функции не инициализируются. Об"явления, которые используют спецификатор класса памяти extern не могут содержать инициализатора.

Переменные, об"явленные на внешнем уровне, могут быть ини-

циализированы. Если они явно не инициализированы, то они устанав­ливаются в нуль во время компиляции или линкования. Любая пере­менная, об"явленная со спецификатором класса памяти static, может быть инициализирована константным выражением. Инициализация пере­менных класса static выполняется один раз во время компиляции. Если отсутствует явная инициализация, то переменные класса памяти static автоматически устанавливаются в нуль.

Инициализация переменных auto и register выполняется каждый раз при входе в блок, в котором они об"явлены. Если инициализатор опущен в об"явлении переменной класса памяти auto или register, то начальное значение переменной не определено. Инициализация

составных типов auto (массив, структура, совмещение) запрещена. Любое составное об"явление класса памяти static может быть иници­ализировано на внешнем уровне.

Начальными значениями для внешних об"явлений переменной и для всех переменных static как внешних так и внутренних должно быть константное выражение. Автоматические и регистровые перемен­ные могут быть инициализированы константными или переменными ве­личинами.

Базовые типы и типы указателей

Синтаксис:

=<expression>

Величина выражения присваивается переменной. Для выражения допустимы правила преобразования.

Примеры:

int x = 10; /* Example 1 */

register int *px = 0; /* Example 2 */ int c = (3 * 1024); /* Example 3 */ int *b = &x; /* Example 4 */

В первом примере x инициализируется константным выражением 10. Во втором примере, указатель px инициализирован нулем, в ре­зультате чего получился "null" указатель. В третьем примере ис­пользуется константное выражение для инициализации c. В четвертом примере инициализируется указатель b адресом другой переменной x.