
- •Введение в системное программирование Основные понятия и определения Программы и программное обеспечение
- •Системное программирование
- •Этапы подготовки программы
- •Системное программирование
- •Лекция 1
- •1. Язык Си: Общая характеристика, историческая справкаи основные достоинства
- •2. Подготовка к выполнению и выполнение программ
- •3. Элементы языка с
- •Лекция 2
- •1. Понятие типа данных. Переменные и константы. Операция присваивания
- •2.Типы данных в языке си. Описание данных в программе
- •3. Константы в языке Си
- •4. Арифметические операции и арифметические выражения
- •5. Операции отношения, логические операции и логические выражения
- •6. Автоматическое преобразрвание типов и операция приведения
- •7. Простейшие операторы языка си. Составной оператор
- •Лекция 3
- •3. Инициализация переменных и массивов
- •4. Управляющие конструкции языка си
- •Лекция 4
- •1. Адреса и указатели
- •2. Отождествление массивов и указателей.Адресная арифметика
- •3. Указатели на массивы. Массивы указателей и многомерные массивы
- •4. Динамическое выделение памяти под массивы
- •5. Инициализация указателей
- •Лекция 5
- •1. Функции в языке си. Формальные и фактические параметры. Механизм передачи параметров. Возвращаемые значения
- •2. Использование указателей в качестве аргументов функций
- •3. Предварительное описание функций
- •4. Аргументы командной строки
- •Лекция 6
- •1. Ввод и вывод в языке си: Общие концепции
- •2. Файлы данных и каталоги. Внутренняя организация и типы файлов
- •3. Стандартные функции для работы с файлами и каталогами
- •4. Внешние устройства как специальные файлы. Организация обмена со стандартными внешними устройствами
- •5. Операции ввода/вывода через порты микропроцессоров intel 8086/80286
- •Лекция 7
- •1. Общая структура программы на языке си. Время существования и видимость переменных. Блоки
- •2. Классы памяти
- •3. Рекурсивные вызовы функций. Реализация рекурсивных алгоритмов
- •4. Препроцессор языка Си
- •5. Модели памяти, поддерживаемые компилятором ibm c/2
- •Лекция 8
- •1. Структуры в языке си: основные понятия
- •2. Массивы структур
- •3. Указатели на структуры
- •4. Вложение структур
- •5. Структуры и функции
- •6. Объединения
- •7. Перечисления
- •8. Определение и использование новых типов данных
- •9. Классы имен
2. Подготовка к выполнению и выполнение программ
Язык Си относится к числу компилируемых языков программирования. Это означает, что подготовка к выполнению Си-программы включает в себя следующие этапы:
- ввод исходного текста программы в файл при помощи какого-либо редактора текстов (имя файла, как правило, имеет стандартное расширение "C");
- компиляция программы, т.е. преобразование ее описания на входном языке в семантический эквивалент на машинном языке, называемый объектным модулем (имя файла, в который помещается результат компиляции, обычно имеет расширение "OBJ");
построение готового к выполнению загрузочного модуля из объектных модулей, включая модули из внешних библиотек (файл, содержащий готовую программу, имеет имя с расширением "EXE"). В процессе компиляции программы создается листинг ее исходного текста, содержащий, возможно, сообщения об обнаруженных ошибках.
Наличие листинга существенно упрощает поиск и устранение ошибок, допущенных при подготовке программы, и сокращает время, затрачиваемое на ее отладку. Имя файла, в который записывается листинг исходной программы, снабжается обычно расширением "LST". На этапе построения загрузочного модуля также возможно создание файла-листинга, включающего в себя информацию о размещении собираемых объектных модулей в памяти ЭВМ. Однако его анализ и использование требует более глубоких знаний основных принципов работы машины, нежели разбор листинга исходной программы. Для запуска в работу готовой к выполнению программы в операционной среде MS DOS достаточно набрать имя содержащего ее файла на клавиатуре консольного терминала, закончив ввод нажатием клавиши Enter.
3. Элементы языка с
В этом параграфе в сжатой форме приводятся основные сведения о структурных элементах языка Си и обсуждаются общие вопросы организации программы.
3.1. Алфавит
3.1.1. Буквы и цифры
- большие буквы латинского алфавита
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
- малые буквы латинского алфавита
a b c d e f g h i j k l m
n o p q r s t u v w x y z
- десятичные цифры
0 1 2 3 4 5 6 7 8 9
3.1.2. Специальные символы
пробел ! " # % & ' ( ) * + , - .
/ : ; < = > ? [ \ ] ^ _ { | } ~
3.2. Имена объектов программы (идентификаторы)
Идентификаторами в языке Си являются последовательности букв и цифр, начинающиеся с буквы, причем символ подчеркивания (_) рассматривается компилятором как буква. Большие и малые буквы латинского алфавита считаются различными. Длина идентификатора формально может быть произвольной, однако только лишь первые 31 символ являются значимыми для компилятора IBM C/2. В программах на языке Си идентификаторы служат именами переменных, символических констант, функций, типов данных и меток. Общепринято для именования констант использовать большие буквы латинского алфавита, сохраняя малые буквы для обозначения переменных и функций.
Замечание. Не рекомендуется в прикладных программах использовать идентификаторы, начинающиеся с подчеркивания, ибо в среде IBM C/2 это может привести к конфликту с именами создаваемых компилятором служебных переменных или констант.
3.3. Ключевые слова
Ключевые слова - это предопределенные идентификаторы, имеющие специальные значения. Имена никаких объектов программы не должны совпадать со следующими зарезервированными ключевыми словами:
- типы данных
char float short typedef void
double int signed union
enum long struct unsigned
- классы памяти
auto extern register static
- операторы
break default for return while
case do goto sizeof
continue else if switch
- специальные
const far huge pascal
cdecl fortran near volatile
3.4. Комментарии
Под комментариями понимаются последовательности символов, игнорируемые компилятором. Комментарии имеют следующую форму:
/* Characters */
где Characters есть произвольная комбинация любых печатаемых символов ASCII.
3.5. Константы
Константами в языке Си могут быть числа (целые и вещественные), символы и строки символов, которые допустимо использовать в программе в смысле их значений. Значение никакой константы не может быть изменено в процессе работы программы. Специальные директивы языка дают возможность присваивать константам любого типа символические имена.
3.6. Операции и выражения
Под операциями следует понимать действия, выполняемые программой над определенными в ней объектами. Для обозначения операций используются некоторые стандартные комбинации специальных символов из алфавита языка. Объекты программы, участвующие в операции, называются операндами. Всякая комбинация одного или большего числа операндов и символов операций, дающая единственное значение, образует выражение. Любое выражение, заканчивающееся точкой с запятой, является оператором (см. п. 3.7.). Множество всех операций языка Си удобно разделить на восемь следующих групп:
- арифметические операции
+ - * / % ++ --
- операции отношения
== != < > <= >=
- логические операции
! || &&
- побитовые операции
~ << >> & | ^
- операции присваивания
= += -= *= /= %= <<= >>= &= ^= |=
- операции над массивами
[]
- операции над структурами и объединениями
->
- другие операции
? : , syzeof (type specifier) ()
3.7. Операторы
Простейшим оператором языка Си является всякое выражение, заканчивающееся точкой с запятой (см. п. 3.6.). В частности, отдельно стоящая точка с запятой интерпретируется компилятором как нуль-оператор. Наиболее значительную группу операторов образуют инструкции (операторы) управления процессом выполнения программы. К ним относятся:
- операторы цикла
for (<init-expression>; <cond-expression>;
<loop-expression>)
statement
while (expression)
statement
do
statement
while (expression);
- условный оператор и переключатель
if (expression)
statement1
<else
statement2>
switch (expression)
{ <case const-expression: <statements>>
. .
. .
. .
<default: <statements>>
. .
. .
. .
<case const-expression: <statements>> }
- операторы передачи управления
goto break continue return
Здесь expression есть произвольное правильное выражение языка Си (см. Лекцию 2), а через statement обозначен простой или составной (см. ниже) оператор, каковым, в частности, может быть и любой оператор управления. Последнее означает, что допустимым является вложение операторов управления друг в друга. Элементы конструкций языка, заключенные в угловые скобки (<>), не являются обязательными и могут быть опущены. Один или несколько операторов, заключенных в фигурные скобки, образуют составной оператор или блок. Точка с запятой после закрывающей скобки при этом не ставится.
3.8. Описания
Описания в языке Си - это строки программы, определяющие имена и характеристики функций, переменных, типов и символических констант, используемых в программе.
3.9. Общая структура программы
Всякая программа на языке Си представляет собой совокупность функций, выполняющих основную работу по реализации некоторого алгоритма. Каждая из этих функций, в свою очередь, есть независимый набор описаний и операторов, заключенных между заголовком функции и ее концом. Та функция, с которой начинается выполнение программы, называется главной функцией. Она должна иметь предопределенное имя
main().