楼主:
j5128709 (j5128709)
2016-04-29 22:15:58请教各位高手
最近在研究嵌入式系统
看到一段程式码 部份有些疑问想请教
/*##### 宣告 ##### */
typedef struct _dlink{
dlink_t head;
}dlink;
typedef struct _dlink_t{
struct _dlink_t *prev;
struct _dlink_t *next;
}dlink_t;
typedef struct _u_idle_t{
dlink_t link;
u_idle_callback_t idle;
}u_idle_t;
typedef void (*u_idle_callback_t) (void);
dlink idle_l;
/*##### 程式码 #####*/
do
{
dlink_t *entry;
for ( (entry) = (&idle_1)->head.next;
(entry) != &(&idle_1)->head;
(entry) = (entry)->next;
) {
u_idle_t *idle = ( (u_idle_t*) ((u8 *) (entry) -
(u8 *) (&((u_idle_t *) 0)->link ))); //Q1
idle->idle();
} //end for
}while(0);
想问说 Q1 这行的该如何解释? 这"0"是说位址嘛?
还是说有啥特别用意??
感谢各位前辈看完
作者:
LPH66 (-6.2598534e+18f)
2016-04-29 22:35:00这看起来像是个 offsetof...看这 code 的形式, 你在看的是 macro 展开之后的程式吗?
作者: longlongint (华哥尔) 2016-04-29 22:56:00
一般是拿来抓object的开头address. 但是这行怪怪的
楼主:
j5128709 (j5128709)
2016-04-29 23:24:00L大 @@ 你猜中了 的确是Macro 我直接带进去贴出来
作者:
wtchen (没有存在感的人)
2016-04-30 01:38:00水晶球哪里买?板工也想要....
楼主:
j5128709 (j5128709)
2016-04-30 09:21:00不太了解offset 能详力一点嘛详细 感谢高手们
我想应该是你要提供这个 macro 的更多细节才是