Операторы препроцессора # и ##
В языках С и 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; Если эти операторы кажутся вам странными, имейте в виду, что большинство программ обходится без них. Они существуют, главным образом, для того, чтобы сделать возможной обработку препроцессором некоторых специальных случаев. |