Программирование на C и C++

Онлайн справочник программиста на C и C++

Операторы препроцессора # и ##

С предоставляет два оператора препроцессора: # и ##. Данные операторы используются в сово­купности c #define.

Оператор # помещает аргумент, перед которым он стоит, в двойные кавычки. Например, рас­смотрим программу:

#include "stdio.h"
#define mkstr(s) # s
int main(void)
{
printf(mkstr(I like C) );
return 0;
}

Препроцессор превратит строку
printf(mkstr(I like C));
в строку
printf ("I like С");

Оператор ## используется для конкатенации двух частей. Например:

#include "stdio.h"
#define concat(a, b) a ## b
int main(void)
{
int xy = 10;
printf("%d", concat(x, y));
return 0;
}

Препроцессор преобразует

printf("%d", concat(x, y) );
в
printf("%d", xy);

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