logo search
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

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

Если непосредственно перед параметром в строке замены идет лексема

#, то при подстановке параметр и операция # будут заменены

на строку литералов , содержащую имя соответствующего параметра

макровызова. В символьной константе или строке литералов, входящих

в параметр, перед каждым вхождением \ или " вставляется символ \.

Например, если есть макроопределения

#define path(logid,cmd) "/usr/" #logid "/bin/" #cmd

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

char* mytool=path(joe,readmail);

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

char* mytool="/usr/" "joe" "/bin/" "readmail";

После конкатенации соседних строк ($$R.16.1) получим:

char* mytool="/usr/joe/bin/readmail";