R Справочное руководство по С++

R.16.3.2 Операция ##.

   


Назад  |  Вперёд

Если в строке замены между двумя лексемами, одна из которых представляет параметр макроопределения, появляется операция ##, то сама операция ## и окружающие ее обобщенные пробелы удаляются. Таким образом, результат операции ## состоит в конкатенации.

Пусть есть макроопределение,

           #define inherit(basenum) public Pubbase ## basenum, \
                                    private Privbase ## basenum

тогда макровызов

           class D : inherit(1) { };

приведет к такому результату:

           class D : public Pubbase1, Privbase1 { };

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

           #define concat(a)    a ## ball
           #define base         B
           #define baseball     sport

Тогда макровызов

           concat(base)

даст в результате

           sport

а вовсе не

           Bball

Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.