c/c++常用技巧(更新中)

1. double -> int   //directx9c以上失效,因为其会改变单浮点精度

ftol



2. c双向链表操作

list

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) ) )  

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    }
   

你可能感兴趣的:(c/c++)