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

Содержание

Имеется два оператора препроцессора: # и ##. Они применяются в сочетании с оператором #define.

Оператор #, который обычно называют оператором превращения в строку (stringize), превращает аргумент, перед которым стоит, в строку, заключенную в кавычки. Рассмотрим, например, следующую программу:

#include <stdio.h>

#define mkstr(s)  # s

int main(void)
{
  printf(mkstr(Мне нравится C));

  return 0;
}

Препроцессор превращает строку

printf(mkstr(Мне нравится C));

в

printf("Мне нравится C");

Оператор ##, который называют оператором склеивания (pasting), или конкатенации конкатенирует две лексемы. Рассмотрим, например, программу

#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);

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