- •Часть 1. Основы создания программ в Си Лекция.1.Язык Си
- •Технология разработки программ
- •Базовые элементы языка Си
- •Представление данных в Си
- •Встроенные типы данных
- •Переменные
- •Операции и выражения
- •Функции
- •Лекция.2.Язык Си Обзор элементов языка Си Типизированные константы
- •Область действия переменных
- •Управляющие конструкции с
- •Массивы и указатели
- •Типы, определяемые пользователем
- •Лекция.3.Препроцессор и отладка программ
- •Макроопределения
- •Условная компиляция
- •1. Предотвращение включения файлов
- •Отладка программ
- •Элементы отладки
- •Лекция.1.Объектно-ориентированное программирование
- •Что такое объектно-ориентированное программирование
- •Пример определений классов
- •Конструктор и деструктор
- •Элементы класса
- •Элементы-функции
- •Элементы данных
- •Класс как область действия
- •Указатель this
- •Лекция.3.Элементы класса Статические элементы класса
- •Статические элементы-функции
- •Специальные элементы-функции класса
- •Конструктор
- •Список инициализации элементов
- •Конструктор копии
- •Операция присваивания
- •Деструктор
- •Операции класса new и delete
- •Функции преобразования
- •Ключевое слово explicit
- •Операции приведения
- •Доступ к базовым классам
- •Простое наследование
- •Конструкторы, деструкторы и наследование
- •Сложное наследование
- •Неоднозначности при сложном наследовании
- •Виртуальные базовые классы
- •Виртуальные функции
- •Чисто виртуальные функции и абстрактные классы
- •Реализация виртуального механизма
- •Лекция.5.Семинар 1-2: Обработка исключений
- •Объекты-исключения
- •Повторное возбуждение исключения
- •Перехват всех исключений
Базовые элементы языка Си
Простейшее консольное приложение на языке Си имеет следующий вид:
#include <stdio.h>
#include <conio.h>
/*
** Печать простого сообщения.
*/
#pragma argsused
int main(int argc, char* argv[])
{
printf("Hello World!\n");
printf ("Press a key...\n");
getch();
return 0;
}
При запуске программа выдает сообщение Hello… и запрашивает нажатие любой кнопки, после чего выполнение программы завершается.
Первые две строчки являются с директивой (т.е. указанием) #include для препроцессора. Все строчки программы начинающиеся с символа # являются директивами для препроцессорной обработки. Директивы #include означают, что каждую из них следует заменить на содержимое файла, имя которого указано в угловых скобках. Это необходимо для проверки корректности вызова библиотечных функций printf и getch соответственно имеющих объявления в этих заголовочных файлах.
Далее 3 троки являются просто комментариями заключенными между парами символов /* … */, которые служат для описание кода программы и полностью игнорируются компилятором.
После директив и комментариев в программе расположено определение функции main (). Любая программа на Си содержит эту функцию, которая является ее входной точкой. В среде Windows вместо main () часто используется winMain ().Функция main () — это, конечно, частный случай функции вообще. Функции являются основными «строительными блоками» программы, или подпрограммами. Они, в свою очередь, строятся из операторов, составляющих тело функции. Каждый оператор оканчивается точкой с запятой (;). В общем виде функция определяется таким образом:
возвращаемый_тип имя_функции(список_параметров)
{
// В фигурных скобках заключено тело функции,
// составленное из отдельных операторов.
тело_функции
}
Представление данных в Си
Литералы
Данные могут присутствовать непосредственно в тексте программы. В этом случае они представляются в виде литеральных констант. Литералы могут быть числовыми, символьными и строковыми. В приложении Hello мы пользовались строковыми литералами. Это — последовательность символов, заключенная в двойные кавычки.
Символьный литерал служит для представления одиночного знака. Это символ, заключенный в одиночные кавычки (апострофы).
Числовые литералы могут быть вещественными (с плавающей точкой) и целыми.
В таблице 3.1 перечислены все упомянутые выше виды литеральных констант и даны соответствующие примеры (в листочке приложения).
Можно дать литеральной константе некоторое имя, определив ее в качестве макроса препроцессора.
#define PI 3.14159265
#define num_e 2.4
#define TRUE 1
#define FALSE 0
После этого можно вместо литерала использовать указанное имя. Это особенно удобно в том случае, когда одна и та же константа встречается в различных частях программы; используя имя вместо литералов, вы гарантированы от опечаток и, кроме того, гораздо проще вносить в код изменения только в одном месте, если значение константы нужно модифицировать во всей программе.
Встроенные типы данных
Любая информация рассматривается компилятором как принадлежащая к некоторому типу данных. В языке имеется несколько встроенных, или простых, типов (возможны и другие типы данных, например, определяемые пользователем). Простые типы перечислены в таблице 3.2.
Размер и допустимый диапазон значений приведены здесь для 32-битной машины. Поэтому, например, тип int имеет размер 32 бита (4 байта) и эквивалентен типу long; на 16-разрядной машине int имел бы размер 2 байта. Но появившихся сравнительно недавно 64-х разрядных машинах int имеет размер 64 бита (8 байт). Это существенно если вы занимаетесь переносом программ на машину с другой разрядностью.