The use of hash # in #define in the C language macro definition

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

Typedef enum
{
E_1,
E_2,
E_3,
}ENUM;

/ / keep the original state
#define x1(state) \
F1(state, #state)
//Connect
#define y1(state) \
F1(state##_1, #state)

Int f1(ENUM state, char* s_state)
{
Printf("%d:%s\n", state, s_state);
Return 0;
}

Int main(int argc, char *argv[])
{
X1(E_2);
Y1(E);

Return -1;
}

result:

$ gcc fns.c
$ ./a.exe
1:E_2
0:E