Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PYaVU_otvyty.docx
Скачиваний:
2
Добавлен:
04.08.2019
Размер:
100.42 Кб
Скачать

Билет 4: организация (структура) модуля

Текст программы на языке Си может быть разделен на несколько исходных файлов(модулей) если слишком много функций в исходном файле. Модуль представляет собой текстовый файл, который содержит либо всю программу, либо ее часть. При компиляции исходной программы каждый из составляющих ее исходных файлов должен быть скомпилирован отдельно, а затем связан с другими файлами компоновщиком. Отдельные исходные файлы можно объединять в один исходный файл, компилируемый как единое целое, посредством директивы препроцессора #include «имя заголовочного файла, содержащего прототипы функций подключаемого к главному модуля».

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

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

Билет 5: Переменные

Переменные могут быть объявлены:

Внутри функции(локальные)

В определении параметров функции(формальные параметры)

За пределами всех функций(глобальные).

Локальные.

Их можно использовать только внутри блока, в котором они объявлены. То есть они не видны за пределами фигурных скобок.

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

Локальную переменную можно инициализировать каким-то значением - оно будет присваиваться при входе в функцию. Не инициализированные переменные имеют неопределённое значение, пока к ним не применят оператор присваивание.

Локальная статическая переменная - это переменная, сохраняющая своё значение между вызовами функции, так как она имеет выделенную постоянную память.

Инициализация каким-либо значением для статик применяется только один раз при вызове функции в первый раз.

Локальная переменная, объявленная в цикле будет видна только для этого цикла.

Глобальные.

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

"+"если необходимо использовать одни и те же данные в разных частях программы.

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

Объявление глобальной статической переменной ограничивает её видимость одним модулем. Это снижает побочные эффекты. И хотя переменная остаётся глобальной - в других модулях она не существует.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]