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

christina.feng   2009-5-18 20:42 楼主
#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);

其中的#号是啥意思?
能详细的解释下代码最好?

回复评论 (10)

[url=http://msdn.microsoft.com/en-us/library/09dwwt6y.aspx][/url]
点赞  2009-5-18 21:49
楼上的链接讲的很清楚。 不错。
点赞  2009-5-18 22:34
主要用于字符串连接合并操作,linux 下有很多这种用法...
点赞  2009-5-18 22:51
up
点赞  2009-5-20 17:52
说明白点,举个例子。


这样回答等于没回答
点赞  2009-5-27 15:45
字符串链接,一个例子:把2个字符连接在一起 如果需要输出"a##n",当n=8时输出a8,当n=9时输出a9。
点赞  2009-5-27 16:00
good
点赞  2009-5-31 17:10
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
函数名的书写了,避免了重复的书写,
当数量多的时候,逻辑比较清晰,而且也省写一些代码。
点赞  2009-5-31 22:06
##相当于把数字转义了。比如TOKEN##N如果N=9那么这个东西就相当于是TOKEN9
点赞  2009-6-1 06:59
学习了。
点赞  2009-6-1 11:44
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复