回楼主:#defined应该是#define吧,一般只见过#if defined something或者#define something
很少见过#defined的.也可能是我自己才疏学浅了。我把它理解成#define好了。
那么楼主的说的是这样一个宏定义吧:
#define sys_(offset) (*(volatile unsigned long *))(offset)
......
假设我这样来调用这个宏:sys_(0xb9ff8877);
那么这个宏会被展开成这样:
(*(volatile unsigned long *))(0xb9ff8877);
//1
根据优先级,左边外层的括号最先被解开,变成这样:
*(volatile unsigned long *)(0xb9ff8877);
//2
2的式子就很简单了吧,表示将0xb9ff8877强制转换成指向unsigned long类型的指针,
然后指针访问运算符*再去访问这个指针的内容(也就是0xb9ff8877所指向的内容)。
那么...上面的宏的意思就是这样的:
当这样调用这个宏,
sys_(offset);
表示,先将offset强制转换成指向unsigned long类型的指针,
再去访问offset指向的内容。
很久没这么费劲的解释复杂的C语言表达式了,也不知道上面的解释是否正确(我晃一眼差点没把它误解成定义了某个返回指针的函数指针,汗...)。如果错了,有请达人指出错误之处并赐教,谢绝胡乱拍砖者。
[
本帖最后由 鼻涕流流 于 2010-3-4 22:23 编辑 ]