定义宏后的哈希符号

Hash symbol after define macro?

本文关键字:哈希 符号 定义      更新时间:2023-10-16
第二个

定义之后,'#'符号有什么作用?第二条线还不够吗?为什么是第一个?

#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

第一行只是此宏的替代名称。