C++. Бархатный путь. Часть 1 Страница 72. Операция ##. Конкатенация в макроопределениях
|
Страница 72 из 82 Операция ##. Конкатенация в макроопределениях В следующем примере мы используем ещё одну специальную операцию для упревления препроцессором - операцию конкатенации ##. Обычно эта операция используется в контексте функциональных макроопределений. Если в замещающей последовательности лексем между двумя лексемами встречается операция препоцессирования ## и, возможно, что одна или обе лексемы являются параметрами, то препроцессор вначале обеспечивает подстановку фактических значений в параметры, после чего сама операция конкатенации и окружающие её пробельные символы убираются: #include <iostream.h> #define XXX(YYY) "МАРТИНИ со льдом и" ## YYY void main() { cout << XXX("ВИСКИ с содовой") << endl; cout << XXX("на сегодня достаточно…") << endl; // Для препроцессора тип параметра не имеет значения. // Важно, как посмотрит на это транслятор… cout << XXX(255); } Перед нами ещё одно мощное и изящное средство управления препроцессором. |