看板 C_and_CPP 關於我們 聯絡資訊
請教各位高手 最近在研究嵌入式系統 看到一段程式碼 部份有些疑問想請教 /*##### 宣告 ##### */ 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