Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прога экз 2 сем.docx
Скачиваний:
0
Добавлен:
14.12.2025
Размер:
1.99 Mб
Скачать

Вопрос 18. Общая структура программы, состоящей из нескольких файлов. Локальные и глобальные переменные. Переменные, видимые в нескольких файлах.

Переменные, объявленные внутри функции, называются локальными. Локальные переменные имеют свои области видимости, этими областями являются функции, в которых объявлены переменные.

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

Общая структура программы на языке C, состоящей из нескольких файлов

Пример структуры файлов: main.c – главный файл с функцией main() math_utils.c – реализация математических функций math_utils.h – заголовочный файл для math_utils.c globals.c – глобальные переменные globals.h – заголовок для глобальных переменных

Для того чтобы использовать переменную в других файлах:

Определяем в одном из файлов .cpp переменную обычным образом.

В .h файле пишем то же определение, но с приставкой extern.

Во всех .cpp файлах, в которых используется переменная делаем видимым данный .h файл.

Вопрос 19. Время жизни и области видимости функций и переменных, объявленных на внешнем уровне.

Переменная, объявленная на внешнем уровне, имеет глобальное время жизни.

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

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

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

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

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

Вопрос 20. Типы, определяемые пользователем. Структуры

Язык Си позволяет создавать еще 5 типов данных: структуры (struct), объединения (union), поля битов (bit fieldse), перечисления или перечислимый тип (enumeration), с помощью оператора typedef.

В отличие от массива, все элементы которого однотипны, структура может содержать элементы разных типов. В языке C++ структура является видом класса и обладает всеми его свойствами, но во многих случаях достаточно использовать структуры так, как они определены в языке С:

struct [ имя_типа ] {

тип_1 элемент_1:

тип_2 элемент_2;

тип_n элемент_n;

} [ список описателей ];

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

Пример: Определение массива структур и указателя на структуру:

struct {

char f1o[30];

int date, code;

double salary;

} staff[100], *ps;

Соседние файлы в предмете Программирование