Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Си.doc
Скачиваний:
3
Добавлен:
15.11.2019
Размер:
2.72 Mб
Скачать

Подстановка имен

Подстановка имен или замена идентификаторов осуществляется директивой:

#define ИМЯ константа (имя)

Например:

#define MAX 100

Выполняя эту директиву, препроцессор в программе вместо переменной с именем MAX

подставит число 100.

После слова define и имени необходимо оставить по пробелу. Так можно легко заменить в программе значения констант, поменяв их только в директиве #define.

Эту же директиву можно использовать и для замены одного имени на другое, более удобное или привычное:

#define AND &&

#define OR ||

Сейчас можно писать программу, используя в качестве логических операций более привычные слова AND и OR. Препроцессор заменит эти известные каждому программисту слова на операции && и ||, используемые в Си.

Директива #define может стоять в любом месте программы. Область ее действия – от места ее появления до конца программы или до директивы:

#undef ИМЯ

Макросы

Директива #define позволяет осуществлять более сложные подстановки, а именно определять функции, зависящие от нескольких аргументов – макроопределения или макросы:

#define SUMMA(x,y) ((x)+(y))

При этом каждое вхождение в текст программы выражения SUMMA(a,b) заменяется препроцессором на выражение ((a)+(b)), причем формальные аргументы макроса x и y заменяются соответственно на фактические аргументы (константы, переменные, элементы массивов, выражения) a и b, для которых и вычисляется значение макроса:

r=SUMMA(2,3);

В этом случае значение переменной r будет равно 5.

В общем виде эта директива записывается следующим образом:

#define ИМЯ (список аргументов) выражение

После слова define и перед выражением должны стоять пробелы. Подставляемое выражение и каждый формальный аргумент в нем необходимо взять в скобки. Если оно не помещается на одной строке, то его можно продолжить на следующих, используя слэш:

#define SUMMA(x,y) ((x)+\

(y))

Макросы похожи на функции, но их обработка не приводит к вызову функций со связанными с этим расходами по передаче аргументов, распределению памяти, возврату значения, что имеет место, когда мы работаем с функциями. Макросы обрабатываются на этапе препроцессирования, а не во время выполнения, и поэтому они могут сократить время выполнения программы. Кроме того, они работают с любыми типами аргументов, в то время как для функции нужно или выполнять приведение типов аргументов или иметь несколько вариантов функции для различных типов аргументов.

Директиву можно использовать и для обращения к стандартным функциям:

#define VYVOD puts(“Programma studenta Vasi Pupkina”)

Выполняя эту директиву, препроцессор заменит в программе все встретившиеся имена VYVOD на функцию вывода puts(“Programma studenta Vasi Pupkina”).

По общепринятым правилам имена, используемые в директивах препроцессора, пишутся заглавными буквами, поэтому и в тексте программы они должны быть записаны так же.

Структуры данных

В повседневной практике обработки информации мы часто имеем дело с естественно организованными (объединенными) представлениями информации: текстами, списками, таблицами, анкетами. Такие организованные (структурированные) данные во многом облегчают их восприятие и обработку.

Естественная организация данных эффективно отражается в современных языках программирования понятием структур данных.

Под структурами данных понимаются специальным образом организованные совокупности данных, облегчающие реализацию алгоритма и их компьютерную обработку.

Отличительной особенность хорошо написанных программ является то, что данные в них организованы в определенные, наиболее подходящие для их хранения и обработки структуры, а сами программы являются лишь средством обработки этих структур независимо от их информационного содержания. Проектирование подходящих структур данных для их эффективной обработки программой столь же важно, и занятие это, возможно, более сложное, чем написание собственно операторов программы в соответствии с выбранным алгоритмом их обработки. Хорошо спроектированные структуры данных облегчают и ускоряют их обработку, улучшают понимание самой программы.

К базовым структурам данных в Си относятся:

  • переменные,

  • массивы,

  • строки,

  • смеси,

  • структуры,

  • файлы.

Из этих структур можно конструировать более сложные, например, файлы структур (базы данных).

Понятие переменных было введено раньше – это структура данных, состоящая из отдельных элементов, каждый из которых имеет имя, тип и конкретное значение.