
- •Лекция 1
- •Понятие программы и языка программирования
- •Компоненты языка программирования
- •Структурная схема компьютерной программы
- •Жизненный цикл программного средства
- •Технология подготовки и решения задачи на компьютере
- •Функция как компонент структуры программы
- •Примеры простых программ в ычисление значения функции в заданной точке
- •Вычисление суммы и количества целых чисел, введенных пользователем с клавиатуры
- •Демонстрация работы со строками на основе использования класса string
- •Виды представления программы и данных
- •Процесс компиляции программы
- •Классическая схема подготовки исполняемой программы
- •Технологический цикл обработки программы
- •Особенности внутреннего представления программы и ее исполнения 9*
- •Организация памяти компьютера
- •Сегментация программы
- •Процесс исполнения программного кода
- •Структура текстового файла программы
- •Структура программы из двух текстовых файлов
- •В результате изучения материала лекции необходимо знать
Структура текстового файла программы
Текст программы может быть размещен в одном или нескольких текстовых файлах (модулях). Модули взаимодействуют друг с другом посредством вызовов функций, которые они содержат, доступа к глобальным переменным, определениям типов и константам. Важным элементом проектирования программы является возможность раздельной трансляции модулей: файлы компилируются по отдельности и объединяются на этапе компоновки.
В строгой интерпретации, в C/C++ физическим модулем является отдельный сегмент компиляции, т. е. объектный файл. Физическому модулю соответствует файл с исходным текстом C/C++, к которому подключены необходимые заголовочные файлы, образующие интерфейс между модулями. Поэтому часто (с некоторой долей условности) модулем называют также файл с исходным текстом. Язык С и первые реализации языка С++ не предоставляли других механизмов реализации модульности, поэтому физический модуль являлся одновременно и логическим модулем.
Пример структуры текстового файла программы, включающей функции main(), f1() и f2():
//имя файла
//директивы препроцессора
#include <стандартный файл> //подключение стандартных заголовочных файлов
#include ”файл пользователя” //подключение заголовочных файлов пользователя
//определение глобальных переменных
//прототипы функций
void f1(); // прототип функции f1
int f2 (int, char); //прототип функции f2
//определение функции main()
int main () { //заголовок функции
//тело функции (операторы)
// операторы, содержащие вызов функций f1 и f2, например: f1();
// например: cout << f2(4, ‘a’) << endl; выведет то, что вернет вызов функции, т.е. выражение return 0; // завершает тело функции с заголовком int main ()
}
//определение функции f1()
void f1() { //заголовок функции
//тело функции
return; // завершает тело функции с заголовком void f1()
}
//определение функции f2()
int f2 (int k, char c) { //заголовок функции
//тело функции f2
return выражение; // завершает тело функции с заголовком int f1(int k, char c)!!!
}
Если функция main() получает аргументы, то она определяется так:
int main (int argc, char *argv[]) //или int main(int argc, char **argv) { //тело функции
return 0; } где: int argc – число слов, переданное в программу при ее запуске, char *argv[ ] – массив из argc строк; аргумент argv[0] является именем запускаемого на выполнение файла; argv[1] – первое переданное слово; argv[2] – второе переданное слово ….. и т.д.
Стандарт языка С++ требует, чтобы функции были объявлены до первой ссылки на них: их прототипы размещаются в начале программы. Компилятор выполняет строгую проверку числа параметров и соответствия типов в прототипе, в вызове функции и в ее определении, а в ряде случаев выполняет и неявное преобразование типов.
Имена функций – это глобальные имена, видимые по умолчанию из всех файлов одного проекта. Однако прототип функции действует только в пределах одного файла. Из-за этого, в частности, приходиться помещать во все совместно компилируемые файлы директивы препроцессора, связанные с подключением .h-файлов, содержащих прототипы библиотечных функций. Как мы видели, прототипы функций помещаются в заголовочный файл, подключаемый директивой #include к тексту файла программы.