Операторы препроцессора # и ##
В языках С и C++ предоставляется возможность работы с двумя операторами препроцессора: # и ##. Эти операторы используются в директиве определения макроса #define. Оператор # превращает аргумент, которому он предшествует, в строку, заключенную в кавычки. Рассмотрим, например, следующую программу. #include <iostream> using namespace std; #define mkstr(s) # s int main() { cout < mkstr(Я люблю C++); return 0; } Препроцессор превратит строку cout << mkstr(Я люблю C++); в строку cout << "Я люблю C++";. Оператор ## используется для конкатенации двух лексем. Например, в программе #include <iostream> using namespace std; #define concat(a, b) a ## b int main() { int xy = 10; cout < concat(x, y); return 0; } препроцессор превратит строку cout << concat(x, у); в строку cout << xy; Если эти операторы кажутся вам странными, имейте в виду, что большинство программ обходится без них. Они существуют, главным образом, для того, чтобы сделать возможной обработку препроцессором некоторых специальных случаев. |
Нет комментариев. Оставить комментарий: |