作者j5128709 (j5128709)
看板C_and_CPP
標題[問題] 請益一段程式碼
時間Fri Apr 29 22:15:58 2016
請教各位高手
最近在研究嵌入式系統
看到一段程式碼 部份有些疑問想請教
/*##### 宣告 ##### */
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"是說位址嘛?
還是說有啥特別用意??
感謝各位前輩看完
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.41.180.25
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1461939360.A.68F.html
推 LPH66: 這看起來像是個 offsetof... 04/29 22:35
→ LPH66: 看這 code 的形式, 你在看的是 macro 展開之後的程式嗎? 04/29 22:36
推 longlongint: 一般是拿來抓object的開頭address. 但是這行怪怪的 04/29 22:56
→ j5128709: L大 @@ 你猜中了 的確是Macro 我直接帶進去貼出來 04/29 23:24
→ Schottky: 我開始相信 LPH 真的有水晶球了 04/30 00:36
→ james732: L大超神,連這樣都看得出來..... 04/30 00:59
推 wtchen: 水晶球哪裡買?板工也想要.... 04/30 01:38
→ j5128709: 不太了解offset 能詳力一點嘛 04/30 09:21
→ j5128709: 詳細 感謝高手們 04/30 09:43
→ Schottky: 我想應該是你要提供這個 macro 的更多細節才是 04/30 12:37