【问题标题】:Macro name escaping without undef没有undef的宏名称转义
【发布时间】:2015-02-19 10:48:30
【问题描述】:

我想知道是否有任何方法可以转义宏名称并实际显示真实名称:

#define BUFF_SIZE 500

printf("%d", BUFF_SIZE);

是否可以在不删除定义的情况下不在这里扩展BUFF_SIZE

【问题讨论】:

  • 你想做printf("BUFF_SIZE");吗?
  • 我不只是在问是否可以从扩展中转义宏名称。
  • @mch printf("BUFF_SIZE");不会展开,因为预处理器不会在字符串文字内展开宏。

标签: c macros c-preprocessor


【解决方案1】:

Stringification:

有时您可能希望将宏参数转换为字符串 持续的。参数不会在字符串常量中被替换,但是你 可以改用“#”预处理运算符。当一个宏参数 与前导“#”一起使用,预处理器将其替换为 实际参数的文字文本,转换为字符串常量。 与普通参数替换不同,参数不是 首先进行宏观扩展。这称为字符串化。

#include <stdio.h>

#define BUFF_SIZE 500
#define STR(x) #x

int main(void)
{
    printf("%s\n", STR(BUFF_SIZE));
    return 0;
}

请注意,您不能使用%d 打印字符串,请使用%s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-27
    • 2021-10-18
    • 1970-01-01
    • 2012-10-21
    • 2020-10-22
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多