[問題] 請益一段程式碼

作者: 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:00
L大 @@ 你猜中了 的確是Macro 我直接帶進去貼出來
作者: Schottky (順風相送)   2016-04-30 00:36:00
我開始相信 LPH 真的有水晶球了
作者: james732 (好人超)   2016-04-30 00:59:00
L大超神,連這樣都看得出來.....
作者: wtchen (沒有存在感的人)   2016-04-30 01:38:00
水晶球哪裡買?板工也想要....
作者: j5128709 (j5128709)   2016-04-30 09:21:00
不太了解offset 能詳力一點嘛詳細 感謝高手們
作者: Schottky (順風相送)   2016-04-30 12:37:00
我想應該是你要提供這個 macro 的更多細節才是

Links booklink

Contact Us: admin [ a t ] ucptt.com