Spec-Zone.ru › GCC 11 CPP

Далее: Ловушки макросов, Предыдущее: Отмена и переопределение макросов, Вверх: Макросы [Оглавление][Индекс]

3.9 Директивы внутри аргументов макроса ¶

Иногда удобно использовать препроцессорные директивы внутри аргументов макроса. Стандарты C и C++ объявляют такое поведение неопределённым. GNU CPP обрабатывает произвольные директивы внутри аргументов макроса точно так же, как бы он обработал эту директиву, если бы вызов функции-макроса отсутствовал.

Если внутри вызова макроса этот макрос переопределяется, то новое определение вступает в силу ко времени предварительной подстановки аргументов, но исходное определение по-прежнему используется для замены аргументов. Вот патологический пример:

#define f(x) x x
f (1
#undef f
#define f 2
f)

который расширяется до

1 2 1 2

согласно описанной выше семантике.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/cpp/Directives-Within-Macro-Arguments.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API