0

重複の可能性:
linux/list.h の container_of マクロの背後にある理論的根拠

#define container_of(ptr, type, member) ({                      \
        const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
        (type *)( (char *)__mptr - offsetof(type,member) );})\

に直接mptrキャストするのではなく、なぜここで構築する必要があるのでしょうか。ptrchar*

4

2 に答える 2

1

型の安全性。単にキャストするのではなく、mptrポインタと同じ型であることを保証します。memberそうでない場合は、警告が表示されます。

于 2012-12-16T11:15:10.107 に答える
0

カーネルで指定されたマクロには型チェックがあります。つまりptr、型「型へのポインター」と互換性のある割り当てである型があることを確認しmemberます。

たとえば、ptrたまたま が整数だった場合、キャストはこれをchar*.

于 2012-12-16T11:17:59.003 に答える