Лекция 1
Введение в С++
Программа 1
Процесс компиляции программы 2
Схема выполнения программы в типичной среде программирования С++ 2
Упрощенная модель компиляции 3
Лексический анализ программы 4
Синтаксический и семантический анализ программы 6
Главные элементы программы 6
Типы данных 7
Классификация типов данных 9
Способы представления данных 9
Константы 10
Обратить внимание!!! 13
Программа
Программирование – процесс разработки программ для работы компьютера.
Программа – описание на языке программирования структур данных и алгоритма решения задачи, автоматически переводимое на язык команд компьютера при помощи программы-транслятора для последующего выполнения компьютером.
Логически программа представляет собой набор функций, одна из которых имеет имя main (в простейшем случае функция main является единственной).
Программа имеет два представления: текстовое (исходный текст программы) и кодовое (двоичный компьютерный код).
Как правило, под программой на С++ подразумевают ее исходный текст (последовательность символов алфавита языка), написанный на С++, набранный в текстовом редакторе и сохраненный в текстовом файле.
Текстовый файл с названием <имя_программы>.cpp (cpp – принятое расширение для программ на С++, имя программы выбирается достаточно произвольно) – основная программная единица на языке С++. Программа записывается в свободном формате, лишние пробелы игнорируются.
Пример программы на С++ (варианты программы демонстрируют разные способы вывода):
//proba_1_1.cpp #include <iostream.h> void main() { cout << ”Ivanov Ivan\n”; cout << ”Ok\n”; } |
/*proba_1_2.cpp*/ #include <stdio.h> void main() { printf (”Ivanov Ivan\n”); printf (”Ok\n”); } |
Программа на любом языке формируется из некоторого набора символов – алфавита языка программирования. Символами алфавита языка С++ являются:
-
строчные и заглавные латинские буквы,
-
цифры 0..9,
-
специальные символы (+ - * / & | ( ) [ ] { } _ = % # ! . , ; : ‘ “ ? \ ^ пробел),
-
пробельные символы (перевод строки, перевод страницы, табуляция, возврат каретки и др.), имеют то же самое назначение, что и пробелы между словами.
Для первоначального представления программы и данных в компьютере проводится кодирование «внешних» символов, основанное на сопоставлении каждому из них определенной группы двоичных знаков1.
Процесс компиляции программы
Для выполнения на компьютере программа переводится с языка высокого уровня на машинный язык. Эту функцию выполняет транслятор (программа-переводчик), имеющий две разновидности: компилятор и интерпретатор. Программы-интерпретаторы непосредственно выполняют программы на языках высокого уровня и не требуют их трансляции в машинный код. Интерпретаторы удобны, когда программы часто перекомпилируются для добавления в них новых возможностей и исправления ошибок. Однако скомпилированные отлаженные программы выполняются более эффективно.
В С++ трансляцию программы в машинные коды осуществляет компилятор, который является одним их компонентов IDE (Integrated Development Environment) – интегрированной среды разработки, предоставляющей программисту средства для комплексной работы с программой (редактирование, компиляция, компоновка, загрузка, выполнение, отладка, справка). Удобство IDE (например, Microsoft Visual C++ 6.0) заключается в том, что не приходится работать с множеством приложений, так как все задачи выполняются в рамках IDE.
Скомпилировать исходный код означает выполнить программу-компилятор, которая транслирует исходный код во внутренний язык компьютера, называемый машинным языком.
Схема выполнения программы в типичной среде программирования С++
Схема выполнения программы в С++ представлена на рисунке 4.1:
Рис.4.1. Схема выполнения программы в типичной среде программирования С++
(1) – программа набирается в текстовом редакторе среды программирования и запоминается на диске (расширение имени файла .срр);
(2) – программа-препроцессор2 распознает в тексте программы директивы (команды) препроцессора (начинаются с символа #) и выполняет их;
(3) – компилятор выделяет лексемы, на основе грамматики языка распознает смысловые конструкции языка (выражения, определения, описания, операторы и т.д.), построенные из этих лексем, выявляет синтаксические ошибки и при их отсутствии создает код на языке ассемблера;
(4) – ассемблер (транслятор) создает машинный код (объектный модуль) программы с расширением .obj и сохраняет его на диске. Файл, содержащий скомпилированную программу, – это объектный код программы.
(5) – системная программа компоновщик объединяет объектный код программы с объектными кодами функций, используемых программой (библиотечные файлы имеют расширение .lib), и определенным стандартным кодом начальной загрузки, в результате чего создается выполняемая версия программы (исполняемый загрузочный модуль) – файл с расширением .exe, сохраняемый на диске. Обычно программы содержат ссылки на функции, определенные вне самой программы: в стандартных или личных библиотеках, а объектный код содержит «дыры» из-за этих отсутствующих частей; компоновщик заполняет эти «дыры». Если программа состоит из нескольких исходных файлов, то они компилируются по отдельности и объединяются на этапе компоновки. Файл, содержащий окончательный продукт, называется исполняемым (загрузочным) модулем.
(6) – загрузчик размещает программу в памяти (забирает исполняемый код с диска и размещает его в памяти).