Справочник по C/C++
Операторы препроцессора # и ##

В языках С и 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;

Если эти операторы кажутся вам странными, имейте в виду, что большинство программ обходится без них. Они существуют, главным образом, для того, чтобы сделать возможной обработку препроцессором некоторых специальных случаев.



Реклама