概览
为了区别标准C,同时为了编程方便、自成体系,GLib定义一些基础的数据类型。大致可以分为如下几类:
- 不属于标准C的全新类型,但通常会在各种库头文件中定义,比如gboolean, gssize;
- 大小固定的整数类型,保证了跨平台一致性,比如gint8, guint8, gint16, guint16, gint32, guint32, gint64, guint64;
- 对接标准C重新定义类型,相对而言更易用,比如gpointer, gconstpointer, guchar, guint, gushort, gulong,以及gchar, gint, gshort, glong, gfloat, gdouble;
- 对接标准C99的类型,即使编译器不支持C99,比如gsize, goffset, gintptr, guintptr
- 确定标准整数、浮点数上下限的宏,比如G_MININT8、G_MAXINT8、G_MAXUINT8等;
- 针对g_print()打印的格式化宏。也许不能在标准C的printf()下工作,但总是兼容C99的printf()。比如G_GINT16_MODIFIER、G_GINT16_FORMAT。
由于上述大多数类型字面含义已经足够清晰,这里只对部分进行介绍。
定义特殊整数常量的宏
G_GINT64_CONSTANT()、G_GUINT64_CONSTANT()等分别用于对于参数后附加类型标识符。
#define G_GINT64_CONSTANT(val) (val##L)
#define G_GUINT64_CONSTANT(val) (val##UL)
#define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val)
部分数据类型说明
1. gboolean
typedef gint gboolean;
#define TRUE (!FALSE)
#define FALSE (0)
gboolean定义了布尔类型,用于包含TRUE或FALSE。但是实际中,由于可能包含一个gint,所以常用 if (condition) 或if (!condition) 来进行判断,而不是判断它是否等于 TRUE或FALSE。
2. gpointer 与 gconstpointer
gpointer 与 gconstpointer 定义了两种可以指向任何数据的指针,后者约定指向的数据不可修改。
typedef void* gpointer;
typedef const void *gconstpointer;