【发布时间】:2018-01-26 15:18:47
【问题描述】:
第二个定义后的“#”符号有什么作用?第二行还不够吗?为什么是第一个?
#define MAKESTRING(n) STRING(n)
#define STRING(n) #n
【问题讨论】:
-
你可能希望在 C++ 中远离这个。
第二个定义后的“#”符号有什么作用?第二行还不够吗?为什么是第一个?
#define MAKESTRING(n) STRING(n)
#define STRING(n) #n
【问题讨论】:
这是字符串化操作,它将从宏参数产生一个字符串文字,例如"n"。需要两行来允许宏参数的额外扩展,例如:
// prints __LINE__ (not expanded)
std::cout << STRING(__LINE__) << std::endl;
// prints 42 (line number)
std::cout << MAKESTRING(__LINE__) << std::endl;
【讨论】:
哈希符号将宏参数转换为 c 字符串。 例如
#define MAKESTRING(x) #x
printf(MAKESTRING(text));
将打印text
第一行是这个宏的唯一替代名称。
【讨论】: