container_ofマクロ
Rev.4を表示中。最新版はこちら。
[root@localhost c]# cat a.c#include <stdio.h>
#include <stddef.h>
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
struct babakaka {
int a;
int b;
int c;
int d;
int e;
};void main()
{
struct babakaka aaa;
int *member[5];
member[0] = &aaa.a;
member[1] = &aaa.b;
member[2] = &aaa.c;
member[3] = &aaa.d;
member[4] = &aaa.e;
printf("-:%x\n", &aaa);
printf("a:%x\n", container_of(member[0], struct babakaka, a));
printf("b:%x\n", container_of(member[1], struct babakaka, b));
printf("c:%x\n", container_of(member[2], struct babakaka, c));
printf("d:%x\n", container_of(member[3], struct babakaka, d));
printf("e:%x\n", container_of(member[4], struct babakaka, e));
}[root@localhost c]# ./a.out
- :bf9aeb78
b:bf9aeb78
c:bf9aeb78
d:bf9aeb78
e:bf9aeb78





