__stringify的作用等同于#

#ifndef __LINUX_STRINGIFY_H
#define __LINUX_STRINGIFY_H

/* Indirect stringification.  Doing two levels allows the parameter to be a
 * macro itself.  For example, compile with -DFOO=bar, __stringify(FOO)
 * converts to "bar".
 */

#define __stringify_1(x...)	#x
#define __stringify(x...)	__stringify_1(x)

#endif	/* !__LINUX_STRINGIFY_H */
所以这个宏就是把传给它的参数转成对应的字符串。这种用法可以被用于swich语句中
例如下面这段code中
#define PHY_STATE_STR(_state)			\
	case PHY_##_state:			\
		return __stringify(_state);	\

这个switch 语句中首先给下面的每个DOWN/STARTING/READY前面通过PHY_##DOWN。然后变成PHY_DOWN,而这个是已经定义的了。最后通过__stringify(_state);将down变成字符串,这个时候有没有PHY 这个前缀,可读性更好。
static const char *phy_state_to_str(enum phy_state st)
{
	switch (st) {
	PHY_STATE_STR(DOWN)
	PHY_STATE_STR(STARTING)
	PHY_STATE_STR(READY)
	}

	return NULL;
}


enum phy_state {
	PHY_DOWN = 0,
	PHY_STARTING,
	PHY_READY,
};


针对__stringify 还有一个作用就是将在makefile中定义的值变成字符串。例如在makefile中定义-DFOO=bar,然后在.c中通过__stringify(FOO)就转成"bar"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值