c/c++常用技巧(更新中)
1. double -> int //directx9c以上失效,因为其会改变单浮点精度
2. c双向链表操作
container_of 宏
1
/* GCC */
2
#define container_of(ptr, type, member) ({ \
3
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
4
(type *)( (char *)__mptr - offsetof(type,member) );})
5![]()
6
//or
7![]()
8
#define container_of(ptr, type, member) ( \
9
(type *)( (char *)ptr - offsetof(type,member) ) )
/* GCC */2
#define container_of(ptr, type, member) ({ \ 3
const typeof( ((type *)0)->member ) *__mptr = (ptr); \ 4
(type *)( (char *)__mptr - offsetof(type,member) );}) 5

6
//or7

8
#define container_of(ptr, type, member) ( \ 9
(type *)( (char *)ptr - offsetof(type,member) ) ) how to use
1
struct my_data {
2
int x;
3
int y;
4
struct list_head list;
5
}
6
7
/* 链表头 */
8
LIST_HEAD(my_listhead);
9
10
void my_function()
11
{
12
13
/* 节点对象 */
14
struct my_data *node_1 = (struct my_data *) malloc(sizeof(struct my_data));
15
struct my_data *node_2 = (struct my_data *) malloc(sizeof(struct my_data));
16
17
/* 加入链表 */
18
list_add (node_1->list, &my_listhead);
19
list_add (node_2->list, &my_listhead);
20
21
/* 遍历链表 */
22
struct my_data * node;
23
struct list_head *pos;
24
list_for_each (pos, &my_listhead) {
25
node = list_entry (pos, struct my_data, list);
26
27
}
struct my_data { 2
int x; 3
int y; 4
struct list_head list; 5
} 6
7
/* 链表头 */ 8
LIST_HEAD(my_listhead); 9
10
void my_function() 11
{ 12
13
/* 节点对象 */ 14
struct my_data *node_1 = (struct my_data *) malloc(sizeof(struct my_data)); 15
struct my_data *node_2 = (struct my_data *) malloc(sizeof(struct my_data)); 16
17
/* 加入链表 */ 18
list_add (node_1->list, &my_listhead); 19
list_add (node_2->list, &my_listhead); 20
21
/* 遍历链表 */ 22
struct my_data * node; 23
struct list_head *pos; 24
list_for_each (pos, &my_listhead) { 25
node = list_entry (pos, struct my_data, list); 26
27
} posted on 2008-06-13 11:15 yyliuliang 阅读(369) 评论(0) 收藏 举报

浙公网安备 33010602011771号