-1
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type,member));})
宏container_of中的'0'對我來說完全是未知的。它是c語言還是某種類型的gcc擴展?宏container_of中0的含義是什麼?
希望有一個簡單的例子來解釋這個'0'。
順便說一句,你的第二個鏈接說:「一個整數常量表達式的值爲0,或者這樣一個表達式轉換爲類型void *,被稱爲空指針常量」,我讀的方式是轉換不需要。 「指針上下文」中的零是一個空指針常量。 – unwind
@unwind:不,因爲在這種情況下它被取消引用,所以你首先需要一個指針。嘗試'0-> member',你會得到一個編譯器錯誤,因爲'0'實際上不是一個指針上下文,(上下文)只是由該強制建立。指針上下文將是例如對指針進行強制轉換的表達式。正如我在對你的回答的評論中所寫的那樣:這是UB的邊緣(雖然不知道從哪邊來),而且必須精確。所以 – Olaf
你是不是現在聲稱它已被解除引用(在你的評論中)而且它不是,在你的實際答案文本中? – unwind