宏名称转义没有undef

时间:2015-02-19 10:48:30

标签: c macros c-preprocessor

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

#define BUFF_SIZE 500

printf("%d", BUFF_SIZE);

在不删除定义的情况下,是否可以不展开BUFF_SIZE

1 个答案:

答案 0 :(得分:3)

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