c置位代码,大家解释解释。

unbutun 2009-05-18 08:42:34
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
#define BIT_MASK(__bf)
(((1U << (bw ## __bf)) - 1)
<< (bs ## __bf))
#define SET_BITS(__dst, __bf, __val)
\
((__dst) = ((__dst) & ~(BIT_MASK(__bf)))
| \
(((__val) << (bs ## __bf))
& (BIT_MASK(__bf))))

SET_BITS(MCDR2, MCDR2_ADDRESS,
RegisterNumber);

其中的#号是啥意思?
能详细的解释下代码最好?
...全文
149 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rzsheng 2009-06-01
  • 打赏
  • 举报
回复
学习了。
beyondma 2009-06-01
  • 打赏
  • 举报
回复
##相当于把数字转义了。比如TOKEN##N如果N=9那么这个东西就相当于是TOKEN9
crifan 2009-05-31
  • 打赏
  • 举报
回复
Linux里面也有很多类似的手法,
比如,

#define SETFN(fn) if (drv->fn) drv->drv.fn = amba_##fn

SETFN(probe);
SETFN(remove);
SETFN(shutdown);

这样,使用宏SETFN(fn)
当SETFN(probe)的时候,就变成了
if (drv->fn)
drv->drv.fn = amba_##probe
也就是
if (drv->fn)
drv->drv.fn = amba_probe

此种手法,比较常见与
一系列的,前缀都一样的函数或者变量,
然后通过##将不同的后缀链接起来。

上面的示例代码,那个宏,就可以实现
amba_probe
amba_remove
amba_shutdown
函数名的书写了,避免了重复的书写,
当数量多的时候,逻辑比较清晰,而且也省写一些代码。
unbutun 2009-05-31
  • 打赏
  • 举报
回复
good
zonewone 2009-05-27
  • 打赏
  • 举报
回复
字符串链接,一个例子:把2个字符连接在一起 如果需要输出"a##n",当n=8时输出a8,当n=9时输出a9。
unbutun 2009-05-27
  • 打赏
  • 举报
回复
说明白点,举个例子。


这样回答等于没回答
技术输出者 2009-05-20
  • 打赏
  • 举报
回复
up
morris88 2009-05-18
  • 打赏
  • 举报
回复
主要用于字符串连接合并操作,linux 下有很多这种用法...
zyzhang365 2009-05-18
  • 打赏
  • 举报
回复
楼上的链接讲的很清楚。 不错。

21,619

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧