Spec-Zone.ru › GCC 13 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-13.3.0/cpp/Directives-Within-Macro-Arguments.html

Spec-Zone.ru

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