Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_тема1_2_лексические основы языка_СГТУ.doc
Скачиваний:
11
Добавлен:
14.08.2019
Размер:
90.62 Кб
Скачать

Тема 1.Структура программы на языке с и схема подготовки исполняемой программы

Основная программная единица на языке С - это текстовый файл с расширением .с (в языке С++ с раcширением .cpp), который может быть создан в любом текстовом редакторе. Процесс перевода программы в машинные коды состоит из следующих этапов. Сначала программа передается препроцессору, который выполняет директивы, содержащиеся в ее тексте (например, включение в текст так называемых заголовочный файлов, в который содержатся описания используемых в программе элементов). Например,

#include <stdio.h>

вставляет в текст программы текст из заголовочного файла stdio.h.

В результате препроцессор изменяет исходный текст программы. Сформированный таким образом текст программы (полный текст программы) поступает на компиляцию. Компилятор (один из видов транслятора), во-первых, выделяет из поступившего текста программы лексемы, а затем на основе грамматики языка распознают смысловые конструкции языка, такие как выражения, операторы, блоки операторов. В результате работы компилятора либо выдается сообщение о синтаксических ошибках, либо в случае их отсутствия формируется объектный модуль программы с расширением .obj. Объектный модуль отправляется на компоновку. Компоновщик (или редактор связей) дополняет объектный модуль нужными библиотечными функциями, обращение к которым содержится в любой программе и, если необходимо, объединяет с другими объектными модулями и формирует исполняемый модуль программы с расширением .exe.

Для того чтобы описать структуру программы, написанной на C, рассмотрим простейшую программу, выводящую на экран строку Hello, world.

// Program1.cpp

#include <stdio.h>

void main()

{

printf("%s","\nHello, world\n");

}

В первой строке данной программы находится однострочный комментарий. Комментарий – это текст программы, который не анализируется компилятором и служит для пояснений текста. В С++ комментарии могут быть заданы двумя способами. В С комментарии могут быть заданы двумя способами. Для однострочных комментариев используют символы //, как в нашем примере. Для многострочных комментариев можно использовать символы /* , */, между которыми и должен находится сам текст комментария. В тексте комментария могут содержаться любые символы, а вся последовательность символов эквивалентна символу пропуска (например, символу пробела). Комментарии одного типа не могут быть вложенными, однако можно использовать символы // для того, чтобы закомментировать символы /*… */, а символами /*…*/можно закомментировать //. В приведенном комментарии указано имя файла, в котором хранится исходный текст программы

Во второй строке программы помещена команда препроцессора (директива) #include, позволяющая подключить стандартные библиотеки функций используемого компилятора или оттранслированные модули, написанные самим программистом. Директива #include имеет два формата:

#include <имя_файла>

#include “имя_файла”.

В первом случае имя_файла определяет текстовый (заголовочный) файл, содержащий прототипы (описания) той или иной группы стандартных для данного компилятора функций. Например, в нашем случае директива #include <stdio.h> обеспечивает включение стандартных функций ввода даннях с клавитуры и вывода на экран. Если программист хочет использовать в своей программе такие стандартные функции как косинус (cos), синус (sin), степень числа (pow), то он должен использовать директиву #include <math.h>, для использования функции ожидания ввода любого символа с клавиатуры без отображения на экране, то есть функции задержки экрана (getch) – директиву #include <conio.h>, функцию конкатенации строк (strcat)– директиву #include <string.h>. Если в программе, например, используется функция cos (функция вычисления косинуса), но не указана директива #include <math.h>, то на этапе компиляции возникнет ошибка.

Если имя_файла после директивы #include указано в кавычках, это означает, что используется не стандартный заголовочный файл, а файл, созданный самим программистом.

Третья строка программы является заголовком функции с именем main. Функция – это поименованная часть программы, выполняющая одну логическую подзадачу. Каждая программа должна содержать функцию с именем main, и работа программы начинается с выполнения этой функции. Перед именем main помещено служебное слово void – спецификатор типа, указывающий, что функция main в данной программе не возвращает никакого значения. Круглые скобки после main требуются в связи с синтаксисом заголовка любой функции и содержат список параметров. В нашем примере параметры не нужны и этот список пуст.

Тело любой функции в языке С – это заключенная в фигурные скобки последовательность описаний и операторов. Каждое описание и оператор заканчивается символом ‘;’. В данном примере в теле функции main нет явных описаний, а есть только один оператор

printf ("%s","\nHello, world\n");

В соответствии с информацией, содержащейся в файле stdio.h, printf является именем функции, который обеспечивает вывод информации на экран монитора. (Поэтому, если строка #include <stdio.h> будет отсутствовать в программе, то имя printf будет воспринято как неизвестное на этапе компиляции программы). Параметр функции "%s" означает, что на экран будет выводится строка. В нашем примере это строковая константа "\nHello, world\n". Строковая константа в языке С –это последовательность символов, заключенная в двойные кавычки. В строке символ обратной косой черты ‘\’, за которым следует другой символ, обозначает один специальный символ, в данном случае, ‘\n’ является символом новой строки. Таким образом, выводимые символы в данном случае состоят из символа перевода строки, символов Hello, world и еще одного символа перевода строки.