#define list_entry(ptr, type, member) \
((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member)))
目的:目的: // 根據節點ptr的位址,得到其type結構體的首位址, member是type結構體中的節點變數名
根據節點ptr, 找到ptr所在的type結構指標
ptr: list_t節點指標,
type: 要查詢的指標型別
member: member是type結構體中定義的list_t型別變數名
分析:(char *) (ptr)就是鍊錶中的乙個節點:&(t.member)
(unsigned long)&((type *) 0)->member): 是member成員到type結構首位址之間的距離
二者相減 = type變數的首位址
使用例子:
static list_head (head);
typedef struct t type
int main();
ptr = head->next; // =&(t.member) 鍊錶中的乙個節點
struct t *p = list_entry(ptr, struct t, member) // = &t
分析list entry()巨集
分析list entry 巨集 define list entry ptr,type,member type char ptr unsigned long type 0 member ptr是指向list head型別鍊錶的指標,type為乙個結構,而member為結構type中的乙個域,型別為li...
OSTaskCreate()函式分析
int8u ostaskcreate void task void pd void p arg,os stk ptos,int8u prio 函式返回乙個8位的整型數,呼叫該函式需要四個引數。第乙個引數乙個指標,也就是使用者 的首位址,在平時使用中我們把自己建立的任務的名字作為這個引數就可以了 第三...
getopt函式分析
函式getopt主要用於拆分命令列引數,用這個函式就不自己寫命令列引數解析程式了,以下 摘自tcpdump原始碼,對這個函式比較感興趣,故對此進行分析注釋,因水平實在不敢恭維,不足之處希望能一起 函式getopt 有三個引數,nargc,nargv就是命令列傳過來的argc和argv字串ostr,它...