關於container of函式分析

2022-07-25 09:00:11 字數 915 閱讀 3033

#include #define offset_of(type,member) ((int)&(((type *)0)->member))

#define container_of(ptr,type,member) ()

struct

mytest;

intmain()

view code

(一).分析下巨集定義1:

#define offset_of(type,member) ((int)&(((type *)0)->member))
(二).分析下巨集定義2:

#define container_of(ptr,type,member) ()
2.1. 分析 const typeof(((type *)0)->member) *__mptr = ptr;

const typeof(((type *)0)->member) :typeof是關鍵字,獲取成員型別。此部分是得到巨集傳過來的成員型別。

const typeof(((type *)0)->member) *__mptr = ptr :此部分為什麼要重新定義__mptr呢?這就是寫linux核心工程師的牛逼,嚴謹之處。如果開發者使                用時輸入的引數有問題:ptr與member型別不匹配,編譯時便會有warnning, 但是如果去掉改行,那個就沒有了,而這個警告恰恰是必須的(防止出錯有不              知道錯誤在**)。。。

2.2. 分析(type *)((char *)__mptr - offset_of(type,member));

(type *)((char *)__mptr - offset_of(type,member)):將char * 強制轉化為(type *)

索引文獻:

container of 函式簡介

在linux 核心程式設計中,會經常見到乙個巨集函式container of ptr,type,member 但是當你通過追蹤原始碼時,像我們這樣的一般人就會絕望了 這一堆都是什麼呀?函式還可以這樣定義?怎麼還有0呢?哎,算了,還是放棄吧。這就是核心大佬們厲害的地方,隨便兩行 就讓我們懷疑人生,凡是...

container of函式原理分析

container of cast a member of a structureout to the containing structure ptr the pointer to the member.指向成員變數的指標 type the type of the container struct...

關於container of等巨集的整理

一直很是疑惑container of是什麼意思,最近看了一些資料,整理一下。1 typeof 首先,我們要知道typeof,它是gcc的c語言擴充套件保留字,用於宣告變數型別。typeof的引數可以是兩種形式 表示式或型別。例如 typeof x 這裡假設x是乙個函式指標,這樣就可以得到這個函式返回...