类型转换宏提供了整型与指针类型的互相转换功能,非常方便,也经常会用到。
类型转换宏说明
#define GINT_TO_POINTER() // 整型转换为指针
#define GPOINTER_TO_INT() // 指针转换为整型
#define GUINT_TO_POINTER() // 无符号整型转换为指针
#define GPOINTER_TO_UINT() // 指针转换为无符号整型
#define GSIZE_TO_POINTER() // gsize类型转换为指针
#define GPOINTER_TO_SIZE() // 指针转换为gsize类型
类型转换宏用法
GLib库很多函数的用户数据类型都是pointer类型,这样做的目的是为了让用户方便地扩展自己定义的数据类型,但如果我们只需传递一个整数(这种情况还挺多),则只需要一个GINT_TO_POINTER宏将整数转换成指针就可以了。
例如,异步队列入队列函数的定义为:
void g_async_queue_push (GAsyncQueue *queue, gpointer data)
第二个参数为gpointer类型,在使用时只需要这样传入整数:
g_async_queue_push(queue, GINT_TO_POINTER (1));
异步队列出队列函数的定义为:
gpointer g_async_queue_pop (GAsyncQueue *queue)
返回值是一个gpointer类型,可以这样将刚才传入的值取出来:
gint value = 0;
gpointer item = NULL;
item = g_async_queue_pop (q);
value = GPOINTER_TO_INT (item)
对于guint和gsize,用法和gint一样。