标题中代码存于以下代码中,第二行中的typeof( ((type *)0)->member ) 为何这样写?typeof(member)不行么? #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) offsetof宏定义在[include/linux/stddef.h]中: #define offsetof(type, member) ((size_t) &((type *)0)->member)
by duanchitian - C/C++ - 2009-01-01 14:34:12 阅读(3239) 回复(2)
#include #include struct cona_t{ int i; int j; int v; char t[10]; unsigned short xy; }; struct cona_t ct; unsigned short xy; int main(int argc,char * argv[]) { int xy,z,addr1,addr2; struct cona_t * p; memset(&ct,0,sizeof(struct cona_t)); ct.i = ct.j = ct.v = 10; sprintf(ct.t,"%s","sdf"); ct.xy = 20; xy = &(((struct cona_t *)0)->j); z = &((&ct)-...
浅析container_of(ptr, type, member) 文章来源:http://gliethttp.cublog.cn #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) #define offsetof(type, member) ((size_t) &((type *)0)->member) 1.ptr为物理地址,其类型和member类型一致,最终使用typeof( ((type *)0)->member ) 由编...
#define offsetof(type, member) ((int)&(type *)0)->member) offsetof(struct sockaddr_in,sin_addr.s_addr) 取 sockaddr_in结构体内 sin_addr.s_addr 成员在结构体中的 便宜 ((int)&(struct sockaddr_in *)0) -> sin_addr.sin_addr 怎么理解的?
#include
使用fork创建进程 pid_t fork(void); 例: #include #include #include #include #include int main() { pid_t pid; pid=fork(); if(pid==(pid_t)(-1)) { fprintf(stderr,"Fork:%s\n",strerror(errno)); exit(13); }else if(pid==0) { printf("PID:%ld:Child started ,parent is :%ld\n",(long)getpid(),(long)getppid())); }else { printf("PID:%ld:Started child PID:%ld\n",(long)getpid(),(long)pid); } sleep(1); return ...
typedef void (SafeArray::*MFPTR1)(int, int); typedef int (SafeArray::*MFPTR2)(int); MFPTR1 mfPtr1 = 0; MFPTR2 mfPtr2 = 0; mfPtr1 = &SafeArray::set; mfPtr2 = &SafeArray::get; 为什么成员函数指针 需要使用 & 取地址? 而一般函数指针 不需要用到 & ? 谢谢