Linux驱动开发——__stringify
在Linux内核中有一个宏__stringify,在include/linux/stringify.h定义如下:
#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 */
其作用实际上就是 把 x 直接转换为字符串。其返回值就是字符串,而不是变量名。
用法1:
#define __ATTR(_name,_mode,_show,_store) { /
.attr = {.name = __stringify(_name), .mode = _mode }, /
.show = _show, /
.store = _store, /
}
假设我们这样使用 __ATTR:
__ATTR(var_name, 777, show_function, store_function)
那么,实际上 复制给 .attr.name 的值是 "var_name" ,而不是var_name 变量所代表的值。
用法2:将枚举类型转换为字符串
#define WCD_MBHC_STRINGIFY(s) __stringify(s)
enum wcd_notify_event {
WCD_EVENT_INVALID,
/* events for micbias ON and OFF */
WCD_EVENT_PRE_MICBIAS_2_OFF,
WCD_EVENT_POST_MICBIAS_2_OFF,
WCD_EVENT_PRE_MICBIAS_2_ON,
WCD_EVENT_POST_MICBIAS_2_ON,
static const char *wcd_mbhc_get_event_string(int event)
{
switch (event) {
case WCD_EVENT_PRE_MICBIAS_2_OFF:
return WCD_MBHC_STRINGIFY(WCD_EVENT_PRE_MICBIAS_2_OFF);
case WCD_EVENT_POST_MICBIAS_2_OFF:
return WCD_MBHC_STRINGIFY(WCD_EVENT_POST_MICBIAS_2_OFF);
case WCD_EVENT_PRE_MICBIAS_2_ON:
return WCD_MBHC_STRINGIFY(WCD_EVENT_PRE_MICBIAS_2_ON);
本文来自博客园,作者:dolinux,未经同意,禁止转载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
2013-08-19 【转载】Ubuntu下SVN安装和配置
2013-08-19 【转载】关于shell中的basename
2013-08-19 tar的-t参数使用