这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » #宏的使用

共1条 1/1 1 跳转至

#宏的使用

工程师
2026-05-14 22:52:01     打赏

在 C 语言宏定义中,# 运算符的作用就是字符串化(stringification),即:把宏参数转换成字符串常量。


一、基本语法
#define 宏名(x)  #x

其中:

  • #x
    会把传入的参数 x
    转换成 "x" 这样的字符串。


二、简单示例
#include <stdio.h>

#define STR(x)  #x

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

预处理后:

printf("%s\n", "hello");

输出:

hello

三、表达式整体变成字符串
printf("%s\n", STR(a + b));

展开后:

printf("%s\n", "a + b");

输出:

a + b

注意:

这里不会计算表达式,
只是把“文本”变成字符串。


四、典型用途1)调试打印

这是最常见用途。

#define PRINT(x)  printf(#x " = %d\n", x)

int a = 10;

PRINT(a);

展开:

printf("a" " = %d\n", a);

字符串自动拼接后:

printf("a = %d\n", a);

输出:

a = 10

2)打印表达式
#define PRINT_EXPR(x) \
   printf(#x " = %d\n", (x))

PRINT_EXPR(a + 5);

输出:

a + 5 = 15

常见于日志系统中。


五、字符串化不会展开宏

这是一个非常重要的知识点。

例如:

#define NUM  100
#define STR(x)  #x

printf("%s\n", STR(NUM));

结果是:

"NUM"

而不是:

"100"

因为:

# 会阻止参数进一步宏展开。


六、先展开再字符串化

需要“两层宏”。

经典写法:

#define STR(x)   #x
#define XSTR(x)  STR(x)

#define NUM 100

printf("%s\n", XSTR(NUM));

过程:

第一层:

XSTR(NUM)
STR(100)

第二层:

STR(100)
"100"

输出:

100



关键词: #宏的使用    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]