ВС
Виктория Ситникова

Не могу понять принцип макроса (C++). Как он работает?

САМ МАКРОС:
#define BUFFER(x,y) *(pBuffer + y * cxBuffer + x)


ИСПОЛЬЗОВАНИЕ (В ТЕКСТЕ ПРОГРАММЫ) :

BUFFER(x, y) = ' ';

BUFFER(xCaret, yCaret) = (char) wParam;

BUFFER(x, yCaret) = BUFFER(x + 1, yCaret);

САМОЕ ГЛАВНОЕ НЕПОНЯТНО ПОЧЕМУ ТАМ СТОИТ ОПЕРАТОР РАЗЫМЕНОВАНИЯ (перед выражением в макросе)

А ВОТ КАК ОБЪЯВЛЯЕТСЯ pBuffer
static char *pBuffer = NULL;

то-есть получается в скобках рассчитывается адрес, а затем разыменовывается?..

Ириша
Ириша

получение ячейки буффера pBuffer с координатами x, y
в скобках берётся адрес, звёздочка разыменовывает указатель

Ли
Литвинов

дефайн просто берет то, что задано в качестве образца и подменяет по всей проге совпавшее на указанное перед компиляцией проги

дефайн образец чем_подменить

Если
#define N 1
то по всей проге заменит то, что обозначено "N" на "1"
а если
#define a(b) b*funk(b)
то словишь замену по всему тексту
a(i++)
на
i++*funk(i++)
и огребёшь два раза "++" там где ожидался всего один инкремент

дефайну пофиг на всякие разименовывания - он просто подставляет длинное выражение туда где короткая запись

ЕК
Евгений Кудряшов

>> то-есть получается в скобках рассчитывается адрес, а затем разыменовывается?. .
Ну да. А при чем тут макросы?
Тебе надо читать: (1) сложение и вычитание указателей, (2) разыменование указателя.

Похожие вопросы
Не могу понять где ошибка, C++ -базовый курс.
Как объявить макрос NB_FormatNetbiosName в C++? мб я чего-то не допонимаю... объясните пожалуйста
На диске C какой-то странный файл.. . не могу понять...
Здравствуйте. Никак не могу понять как нужно работать в Visual C++ 2010. Я только начинающий. Делаю следующее. Создаю
Почему не работает макрос? (см. вн.)
как работать в макросе?
Borland C++, не могу понять суть задачи по массивам.
Ecxel,VBA, Макрос, что вы думаете о макросе и как его облегчить
Может ли макрос Excel запустить выполнение макроса в Word?
Не могу понять как работает scanf(). Си.