'#'符号做第二个定义后?并不是第二行足够吗?为什么是第一个?
#define MAKESTRING(n) STRING(n)
#define STRING(n) #n
答案 0 :(得分:5)
这是字符串化操作,它将从宏参数产生一个字符串文字,例如"n"
。需要两行才能允许额外扩展宏参数,例如:
// prints __LINE__ (not expanded)
std::cout << STRING(__LINE__) << std::endl;
// prints 42 (line number)
std::cout << MAKESTRING(__LINE__) << std::endl;
答案 1 :(得分:-1)
哈希符号将宏参数转换为c-string。 例如
#define MAKESTRING(x) #x
printf(MAKESTRING(text));
将打印text
第一行只是该宏的替代名称。