
- •Оглавление
- •Лекция 1 Тема: Процесс построения программы.
- •Директивы #include
- •Комментарии
- •Лекция 2 Тема: Представление данных в с. Литералы
- •Встроенные типы данных
- •Типизированные константы
- •Операции и выражения
- •Семантика операций
- •Операции присваивания сама возвращает значение, что позволяет, например, написать:
- •Приведение типа
- •Смешанные выражения.
- •Поразрядные операции и сдвиги.
- •Инкремент и декремент
- •Запятая
- •Лекция 3 Управляющие конструкции с.
- •Условный оператор if... Else
- •Оператор выбора switch
- •1. Цикл while
- •2. Цикл do—while
- •3. Цикл for
- •Операторы прерывания блока
- •Escape-последовательности.
- •Лекция5 Функции
- •Задание
- •Лекция 6 Массивы и указатели
- •Последнее эквивалентно
- •Указатель на функцию
- •Лекция 7 Строки.
- •Лекция 8 Типы, определяемые пользователем.
- •Переименование типов.
- •Перечислимые типы
- •Структуры.
- •Объединения.
- •Лекция 9 Файлы.
- •Лекция 10 Связанные структуры.
- •Лекция 11 Директивы препроцессора
- •Условная компиляция
- •Директива #error
- •Директива # linе
- •Директива # pragma
- •Типичное применение препроцессорных директив Предотвращение включения файлов
- •Переключение разделов кода
- •Отладочные диагностические сообщения
- •Лекция 12 Тема: Состав проекта.
- •Лекция 13 Тема: Объектно-ориентированное программирование.
- •Лекция 14 Тема: Создание классов и их потомков. Перегрузка функций.
- •Лекция 15 Тема: Создание новых компонентов.
Оглавление
Лекция 1 2
Лекция 2 5
Литералы 5
Встроенные типы данных 5
Типизированные константы 6
Операции и выражения 6
Семантика операций 8
Лекция 3 11
Управляющие конструкции С. 11
Условный оператор if... else 11
Оператор выбора switch 12
Циклы 13
3. Цикл for 14
Операторы прерывания блока 14
Лекция4 16
Организация ввода-вывода. 16
Ввод и вывод в С 16
Спецификация преобразования 16
Escape-последовательности. 17
Лекция5 19
Функции 19
Лекция 6 24
Массивы и указатели 24
pmas =mas; // pmas указывает на начальный элемент mas. 27
Последнее эквивалентно 27
Указатель на функцию 30
Лекция 7 32
Строки. 32
Лекция 8 36
Типы, определяемые пользователем. 36
Переименование типов. 36
Перечислимые типы 36
Структуры. 37
Объединения. 39
Лекция 9 42
Файлы. 42
Лекция 10 47
Связанные структуры. 47
Лекция 11 52
Директивы препроцессора 52
Предотвращение включения файлов 55
Переключение разделов кода 55
Отладочные диагностические сообщения 55
Лекция 12 56
Тема: Состав проекта. 56
Лекция 13 58
Лекция 14 62
Лекция 15 67
Тема: Создание новых компонентов. 67
Файл NewEdit.h 67
Файл NewEdit.cpp 67
Лекция 1 Тема: Процесс построения программы.
Программист готовит файлы исходного кода на C/C++.
Исходные файлы компилируются в файлы объектного кода (с расширением .obj)
Объектные файлы компонуются с присоединением необходимых библиотек (в том числе, возможно, динамических), в результате чего получается уже машинный код.
Компонуются ресурсы (битовые матрицы, курсоры, строковые таблицы, пиктограммы и т.п.) и формируется конечный ехе-файл, запускаемый на выполнение.
С ростом сложности и объема программ приходится разбивать их на несколько файлов исходного кода. Соответственно трансляция программы распалась на два этапа:
каждый из исходных файлов транслируется в файл объектного кода;
из нескольких объектных файлов в результате компоновки получается конечный исполняемый файл.
Директивы #include
Возможность раздельной компиляции обеспечивается в C/C++ применением заголовочных файлов, присоединяемых к компилируемым исходным файлам на этапе препроцессорной обработки. Заголовочные файлы содержат прототипы функций, объявления типов и другую информацию, необходимую для раздельной компиляции исходных модулей программы. Они имеют расширение .h или .hpp и подключаются к компилируемому файлу исходного кода (.с или .срр) с помощью директивы препроцессора #include, за которой следует имя заголовочного файла в кавычках или угловых скобках, например:
#include <stdlib.h>
#include "myfile.h"
Эти случаи различаются порядком поиска включаемых файлов:
если использованы угловые скобки, поиск будет сначала производиться в стандартных каталогах C++Builder,
если кавычки — в текущем каталоге.
Препроцессор заменяет директиву #include содержимым указанного файла; после завершения препроцессорной обработки полученный текст передается компилятору, который транслирует его в объектный код.
Один и тот же заголовок можно подключать ко многим исходным файлам. Таким образом:
отдельно компилируемые модули получают доступ к необходимой информации о процедурах и прочих элементах программы, определяемых в других модулях.
это гарантирует, что размещенное в заголовочном файле объявление типа или функции будет одним и тем же во всех компилируемых файлах, и любые внесенные в него изменения будут автоматически воздействовать на все модули программы.
В любых программах возникает необходимость включения в исходный код двух заголовочных файла стандартной библиотеки.
Файл stdio.h содержит прототипы общеупотребительных функций буферизованного ввода-вывода (функцию prinf() — форматируемый вывод на консоль).
Файл соnio.h необходим потому, что для ожидания нажатия клавиши (в консольном приложении) применяется функцию ввода символа getch() (символ, возвращаемый функцией, игнорируется).
Заголовочные нестандартные файлы весьма эффективны при модульной разработке крупных программ, когда связь между модулями, размещаемыми в разных файлах, реализуется не только с помощью параметров, но и через внешние объекты, глобальные для нескольких модулей. Описание таких внешних объектов помещают в отдельный файл, который при помощи директивы #include подключается ко всем необходимым модулям. В тот же файл можно включить директивы подключения стандартных заголовочных файлов. Например, заголовочный файл может быть таким:
# include <stdio.h>
# include <conio.h>
extern int k,l;
Если данный файл сохранить под именем “myfile.cpp”, то его можно будет подключать к другим программам директивой
#include “myfile.cpp”
Это позволит в программах использовать все средства стандартных библиотек и значения внешних переменных.
По принятому соглашению расширение .h приписывается тем функциям, которые содержат прототипы библиотечных функций, а так же описания типов и констант, используемых при работе с библиотеками компилятора.
Библиотека объектных модулей – это соединение модулей объектного кода, скомпонованных в одном файле с расширением .lib. Динамически присоединяемые библиотеки DLL мало чем отличаются от обычных, статически компонуемых библиотек объектных модулей. Функция, которая находится в DLL, вызывается так же, как и всякая другая функция. Правда, “снаружи” динамическая библиотека выглядит скорее как исполняемый файл; эти библиотеки создаются не библиотекарем, а компоновщиком. Каждая библиотека, как правило, сопровождается своим заголовочным файлом (их может быть и несколько), который определяет интерфейс ее функций и других элементов. Исходный код библиотеки может быть и недоступен для программиста. Но в ее заголовочном файле (или файлах) имеется все необходимое для использования библиотеки в прикладной программе.
Функция main()
После всех директив в программе расположено определение функции main (). Любая программа на С содержит эту функцию, которая является ее входной точкой. Именно этой функции передается управление после загрузки и инициализации программы.
Функция main () — это, конечно, частный случай функции вообще. Функции являются основными “строительными блоками” программы, или подпрограммами. Они, в свою очередь, строятся из операторов, составляющих тело функции. Каждый оператор оканчивается точкой с запятой (;). В общем виде функция определяется таким образом: Возвращаемый_ тип имя функции (список_ параметров)
{
тело_функции
}
Пример простой программы.
#include <stdio.h>
#include <conio.h>
void main(void)
{
printf("Hello!\n");
printf("Press any key...");
getch();
return 0;
}