Макроподстановка с аргументами.

Препроцессор позволяет использовать более сложную и полезную форму, директивы #define.

Формат: #define идентификатор (идентификатор, …, идентификатор) строка, где идентификатор – это символичный макроидентификатор. В скобках – это список параметров и строка – подставляемая строка. Обычно она включает параметры. Не должно быть пробелов между макроидентификатором и открывающими сковкой, в противном случае препроцессор будет рассматривать директиву как простую подстановку, а список параметров трактовать как подставляемую строку. Макроподстановка с аргументами аналогично функции. Иногда макроподстановку с аргументом называют псевдофункцией или макроопределением или макросом типа функция. Каждый раз при встрече такого макроса аргументы макроса будут замещаться реальным аргументом программы.

#include<stdio.h>

#define MIN(a,b) ((а)<(b))?(а):(b)

int main(void)

{int x,y;

x=10;

y=20;

printf(“Минимальное число это:%d”, MIN(x,y));

return 0;

}

При компиляции программы вместо MIN(a.b) подставляем выражение (1), причём вместо директивных параметров а и в подставляем реальные х и у. Таким образом, в результате подстановки print имеет вид:

printf(“Минимальное значение:%d”,((x)<(y)?(x):(y));

Необходимо отметить, что каждое появление параметра в появляемой строке должно заключаться в скобки. Вся подставляемая строка тоже должна заключаться в скобки.

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

#define KV(X) ((X) ´(X))

Запись макроопределения в виде

#define KV(X) X´X

#define KV(X) (X´X)

#define KV(X) (X)´(X)

приведёт к неверному результату.

Пример:

#define ESCAPE (N) bdos (6,27); bdos (6,(N))

#define CLEAR ESCAPE (69)

#define REVERS ESCAPE (112)

#define MERC ESCAPE (115)

#define NOMERC ESCAPE (116)

#define KURSOR G(x,y) ESCAPE (89); bdos (6,x+32); bdos (6,y+32)

#define NOLREVER ESCAPE (113)

Первое макроопределение обеспечивает передачи ESCAPE символа (десятичный код 27) и далее любого символа, который посылается на экран посредством параметра N. Для этой цели используется библиотечная функция bdos. Имеются функции управляющих последовательностей для установки режимов работы дисплея, а именно, режимов экрана, цвета, света. Можно задать следующие действия: очистить экран, установить «обратное» изображение, отменить «обратное» изображение, установить мерцание, отменить мерцание и т.д. Эти действия задаются с помощью десятичного символа-определителя. Так, например, второе макроопределение очищает экран (код символа определителя 69). Третье макроопределение устанавливает обратное изображение (код символа определителя 112). Код символа определителя 113 отменяет обратное изображение. 4-ое макроопределение устанавливает мерцание (код – 115). Пятое – отменяет мерцание (код – 116). 6-ое – обеспечивает передвижение курсора в позиции х, у (код – 89).








Дата добавления: 2016-04-14; просмотров: 549;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.