When I use x before the name of the macro or function call, I use it to denote advanced use, and I think I'm not alone.
For your example, use str for the token string, but for extended use, use xstr , that is, to extend the macro argument and its result. For comparison, when only one of the macros should be used most of the time, and the other for internal implementations, I would do the following:
#define _str(token) #token #define str(token) _str(token)
Chul-woong yang
source share