【问题标题】:Hash symbol after define macro? [duplicate]定义宏后的哈希符号? [复制]
【发布时间】:2018-01-26 15:18:47
【问题描述】:

第二个定义后的“#”符号有什么作用?第二行还不够吗?为什么是第一个?

#define MAKESTRING(n) STRING(n)
#define STRING(n) #n

【问题讨论】:

标签: c++ c


【解决方案1】:

这是字符串化操作,它将从宏参数产生一个字符串文字,例如"n"。需要两行来允许宏参数的额外扩展,例如:

// prints __LINE__ (not expanded)
std::cout << STRING(__LINE__) << std::endl;
// prints 42 (line number)
std::cout << MAKESTRING(__LINE__) << std::endl;

【讨论】:

    【解决方案2】:

    哈希符号将宏参数转换为 c 字符串。 例如

    #define MAKESTRING(x) #x
    printf(MAKESTRING(text));
    

    将打印text

    第一行是这个宏的唯一替代名称。

    【讨论】:

    • 这不是替代名称:否则该参数不会被扩展。
    猜你喜欢
    • 2012-06-09
    • 2023-03-29
    • 1970-01-01
    • 2011-11-07
    • 2011-03-22
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多