Оператор препроцессора #
превращает параметр макроса в строковый литерал.Вывод:
#include <stdio.h>
#define name Joe
#define Helper(x) #x
#define Stringify(x) Helper(x)
int main(void)
{
int name = 4;
printf("%s is %d.\n", Stringify(name), name);
}
:
Джо равен 4.
Необходимы два макроса, потому что расширение x
в дляStringify
будет выполняться только после применения #
.Поэтому нам нужно Stringify
, чтобы развернуть x
, а затем Helper
, чтобы получить строковый литерал.
Не используйте это в рабочем коде без уважительной причины.Играть в игры с препроцессором следует осторожно.