проблема в понимании правил расширения макроса - PullRequest
0 голосов
/ 22 марта 2011

Будучи новичком, мне трудно понять следующее утверждение

а) Если в списке замены функциональный макрос, параметр непосредственно предшествует или сопровождается ## токен предварительной обработки, параметр заменяется на соответствующий маркер предварительной обработки аргумента последовательность;

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

Не могли бы вы помочь мне понять приведенное выше утверждение с помощью простого примера

Ответы [ 3 ]

3 голосов
/ 22 марта 2011

Macro

#define MAKE_EVENT_HANDLER(x)  void On##x(void) {

Использование

MAKE_EVENT_HANDLER(MouseClick)
   /* Do stuff */
} // End of function

Как это расширяется

void OnMouseClick(void) { /* Do stuff */ }
1 голос
/ 22 марта 2011

Некоторое время назад я написал пару статей, посвященных препроцессору. Они содержат как технические вещи, так и фольклор. Часть 2 охватывает операторы # и ##.

Часть 1: Основы использования препроцессора

Часть 2: Расширенные советы и приемы препроцессора

0 голосов
/ 22 марта 2011

Википедия имеет хорошую иллюстрацию -> вставка токена

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...