下面这个宏是求结构体中某成员的偏移量
#if defined(__GNUC__) && __GNUC__ >= 4
#define G_STRUCT_OFFSET(struct_type, member) \((glong) offsetof (struct_type, member)) //使用库函数
#else
#define G_STRUCT_OFFSET(struct_type, member) \
((glong) ((guint8*) &((struct_type*) 0)->member)) //在0地址转为struct_type类型,再取member成员地址,妙啊
#endif
使用方法如下:
int offset = G_STRUCT_OFFSET(struct s, d))
下面的和上面宏差不多,不解释了
#define G_STRUCT_MEMBER_P(struct_p, struct_offset) \
((gpointer) ((guint8*

本文介绍了glib库中用于计算结构体成员偏移量的宏G_STRUCT_OFFSET及其相关宏G_STRUCT_MEMBER_P和G_STRUCT_MEMBER的使用。同时,探讨了glib的原子操作,如g_atomic_int_dec_and_test和g_atomic_int_compare_and_exchange,这些宏在GCC编译器下实现,与Linux内核中的原子操作类似。
最低0.47元/天 解锁文章
652

被折叠的 条评论
为什么被折叠?



