ЗАМЕЧАНИЯ К МАКРОСАМ С
- макрос пригоден для обработки параметров любого типа, допустимых в выражениях строки замещения;
- аргументы вызова макроса – препроцессорные лексемы, разделенные запятыми. Аргументы макрорасширениям не подвергаются.
Оператор #
Оператор '#' требует, чтобы текст, замещающий данный параметр в формируемой строке, заключался в двойные кавычки.
Пример:
Макроопределение:
#define print (A) printf(#A"=%f', A)
К макросу print (A) можно обращаться, подставляя вместо параметра A произвольные выражения, формирующие результаты вещественного типа, пример:
print (sin (a/2)); - обращение к макросу;
printf("sin (a/2)""=%f", sin (a/2)); - макрорасширение•
Фрагмент программы:
double a=3•14159;
print (sin (a/2));
результат выполнения (на экране дисплея):
sin (a/2)=1.0
Оператор ##
Оператор ## - бинарный, позволяет выполнять конкатенацию лексем, включаемых в строку замещения.
Пример:
#define zero (a, b, с, d) a (bcd)
#define one (a, b, с, d) a (b с d)
#define two (a, b, с, d) a (b##c##d)
макровызов: результат макроподстановки:
zero(sin, x, +, y) sin(bcd)
|
|
one(sin, x, +, y) sin(x + y)
two(sin, x, +, y) sin(x+y)
В случае zero() последовательность "bcd" воспринимается как отдельный идентификатор. Замена параметров b, c, d не выполнена. В строке замещения макроса one() аргументы отделены пробелами, которые сохраняются в результате. В строке замещения для макроса two() использован оператор '##', что позволило выполнить конкатенацию аргументов без пробелов между ними.
В языке С все основные возможности реализованы во внешних библиотеках. Прототипы функций объявляются в стандартных заголовочных файлах, которые иногда называют стандартными библиотеками языка С.
По принятому соглашению суффикс.h приписывается тем файлам, которые содержат прототипы библиотечных функций, а также определения и описания типов и констант, используемых при работе с библиотеками компилятора.
Перечень обозначении заголовочных файлов для работы с библиотеками компилятора утвержден стандартом языка. Ниже приведены названия этих файлов, а также краткие сведения о тех описаниях и определениях, которые в них есть. Большинство описаний - прототипы стандартных функции, а определены в основном константы (например, NULL, EOF), необходимые для работы с библиотечными функциями. Все имена, определенные в стандартных заголовочных файлах, являются зарезервированными именами:
assert.h Диагностика программ
ctype.h Преобразование и проверка символов
errno.h Проверка ошибок
float.h Работа с вещественными данными
limits.h Предельные значения целочисленных данных
locate.h Поддержка национальной среды
math.h Математические вычисления
setjump.h Возможности нелокальных переходов
signal.h Обработка исключительных ситуаций
|
|
stdarg.h - Поддержка переменного числа параметров
stddef.h - Дополнительные определения
stdio.h - - Средства ввода-вывода
stdlib.h - Функции общего назначения (работа с памятью)
string.h - Работа со строками символов
time.h - Определение дат и времени
Стандартные заголовочные файлы могут включаться в текст программы в любом порядке. Действие включаемого заголовочного файла распространяется на текст программы только в пределах одного модуля – от места размещения директивы #include до конца текстового файла.
С помощью технологии включаемых файлов можно осуществить связь модулей, размещенных в разных файлах не только через параметры, но и через общие – глобальные объекты. Описания таких объектов помещаются в одном файле, который с помощью директив #include включается в те модули, где необходимы внешние объекты.
Модуль 3 Указатели, массивы, строки, функции, структуры, ввод-вывод в С/С++
(6-часов)
Содержание модуля: Указатели на объекты. Адреса, указатели и массивы. Действия с указателями. Работа с динамической памятью в С/С++. Массивы динамической памяти. Символьная информация и строки. Функции С/С++. Массивы, строки, функции как параметры функций. Структурный тип. Реализация динамических структур данных в С/С++. Потоковый ввод-вывод в С/С+