c语言字符串化# 和 宏连接符##

本文详细介绍了C语言预处理器中的##和#宏操作符的使用。##用于连接两个宏参数,例如CONS(2,3)生成2e3;#则将宏参数转换为字符串,如STR(vck)输出字符串vck。当#操作符作用于包含宏定义的参数时,宏不会展开,而是直接转化为字符串。示例代码展示了宏展开和字符串化的不同效果,强调了宏在处理字符串和拼接时的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们使用 # 把宏参数变为一个字符串
## 把两个宏参数贴合在一起。

1、##(宏连接)

#define CONS(a,b)  int(a##e##b)
printf("%d\n", CONS(2,3));  // 2e3 输出:2000

2、#(字符串化)

  • 我们使用 # 把宏参数变为一个字符串
#define STR(s)     #s
printf(STR(vck));           // 输出字符串"vck"
  • 注意:如果 # 的参数是一个宏,那么这个宏不会被替换,而是直接将这个宏转换为字符串型。
    如下
#include<stdio.h>

#define	A	B
#define B	C
#define C	D

#define _str_1(X)	#X
// 一般会设置此中间层,在这一步中,X若是宏的话会被转成宏值,下一步执行_str_1() 才会被转成字符串
#define	_str(X)		_str_1(X)

int main(int argc, char** argv)
{
	puts(_str(A));
	puts(_str_1(A));
	return 0;
}

运行结果

D
A
  • 结论:
    1、不论一个 宏 X 内嵌套了多少层宏,在 _str(X) 转换为 _str_1(X) 这一步中, X 都能一步到位,变为最终
    值,然后在通过 # 字符串化。
    2、如果 # 的参数是一个宏,那么这个宏不会被替换,而是直接将这个宏转换为字符串型。
    3、代码块第8行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值