基本类型
基本类型
GLib 定义了一些常用类型,可以分为以下几个组
- 新类型,不属于标准 C(但在各种 C 标准库头文件中定义)——
gboolean
、gssize
。 - 保证在所有平台上大小相同的整型类型——
gint8
、guint8
、gint16
、guint16
、gint32
、guint32
、gint64
、guint64
。 - 比其标准 C 对应类型更容易使用的类型——
gpointer
、gconstpointer
、guchar
、guint
、gushort
、gulong
。 - 与标准 C 类型完全对应的类型,但出于完整性将其包括在内——
gchar
、gint
、gshort
、glong
、gfloat
、gdouble
。 - 与标准 C99 类型完全对应的类型,但即使在编译器不支持 C99 的情况下也可使用——
gsize
、goffset
、gintptr
、guintptr
。
GLib 还为部分标准整型和浮点类型的限制定义了宏,以及为这些类型定义了合适的 printf()
格式宏。
请注意,根据平台和生成配置,格式宏可能与系统提供的 printf()
函数不兼容,因为 GLib 可能在内部使用不同的 printf()
实现。格式宏始终适用于 GLib API(如 g_print()
)以及任何与 C99 兼容的 printf()
实现。
基本类型
gboolean
标准布尔型。此类型的变量只应包含值 TRUE
或 FALSE
。
绝不要将 gboolean
变量的内容直接与值 TRUE
或 FALSE
进行比较。使用 if (condition)
检查 gboolean
是否为“真”,而不是 if (condition == TRUE)
。同样地,使用 if (!condition)
检查 gboolean
是否“假”。
在对 gboolean
变量赋值时没有验证,因此它可以包含 gint
表示的任何值。这就是建议使用 if (condition)
的原因。C 中的所有非零值都将评估为“真”。
gpointer
未类型的指针,与 void *
完全相同。
通常在新代码中应首选标准 C void *
类型,但 gpointer
可用于必须为单字的类型名的上下文中,例如在 G_TYPE_POINTER
的 GType
名称中或在使用宏为多个类型生成一系列函数名时。
gconstpointer
指向常量数据的未类型指针,与 const void *
完全相同。
不应更改所指向的数据。
这通常用于函数原型中,以指示所指向的数据不会被函数更改。
在新代码中通常应优先使用标准 C const void *
类型,但 gconstpointer
可用于必须为单字的类型名的上下文中。
gchar
相当于标准 C char
类型。
此类型仅出于与 guchar
对称而存在。在新代码中应优先使用标准 C char
类型。
guchar
相当于标准 C unsigned char
类型。
在新代码中通常应优先使用标准 C unsigned char
类型,但在类型名称必须为单个单词(例如在 G_TYPE_UCHAR
的 GType
名称中,或在使用宏为多种类型生成一组函数名称时)的情况下,可以使用 guchar
。
自然大小整数
gint
相当于标准 C int
类型。
此类型的取值范围为 INT_MIN
到 INT_MAX
,或等价地从 G_MININT
到 G_MAXINT
。
此类型仅出于与 guint
对称而存在。在新代码中应优先使用标准 C int
类型。
G_MININT
-
可以在
gint
中保存的最小值。这与标准 C
INT_MIN
相同,它在 C99 中可用,并且应在新代码中优先使用。 G_MAXINT
-
可以在
gint
中保存的最大值。这与标准 C
INT_MAX
相同,它在 C99 中可用,并且应在新代码中优先使用。
guint
相当于标准 C unsigned int
类型。
此类型的取值范围为 0
到 UINT_MAX
,或等价地 0
到 G_MAXUINT
。
在新代码中通常应优先使用标准 C unsigned int
类型,但在类型名称必须为单个单词(例如在 G_TYPE_UINT
的 GType
名称中,或在使用宏为多种类型生成一组函数名称时)的情况下,可以使用 guint
。
G_MAXUINT
-
可以在
guint
中保存的最大值。这与标准 C
UINT_MAX
相同,它在 C99 中可用,并且应在新代码中优先使用。
gshort
相当于标准 C short
类型。
此类型的取值范围为 SHRT_MIN
到 SHRT_MAX
,或等价地 G_MINSHORT
到 G_MAXSHORT
。
此类型仅出于与 gushort
对称而存在。在新代码中应优先使用标准 C short
类型。
G_MINSHORT
-
可以在
gshort
中保存的最小值。这与标准 C
SHRT_MIN
相同,它在 C99 中可用,并且应在新代码中优先使用。 G_MAXSHORT
-
可以在
gshort
中保存的最大值。这与标准 C
SHRT_MAX
相同,它在 C99 中可用,并且应在新代码中优先使用。
gushort
相当于标准 C unsigned short
类型。
此类型的取值范围为 0
到 USHRT_MAX
,或等价地从 0
到 G_MAXUSHORT
。
在新代码中通常应优先使用标准 C unsigned short
类型,但在类型名称必须为单个单词(例如在使用宏为多种类型生成一组函数名称时)的情况下,可以使用 gushort
。
G_MAXUSHORT
-
可以在
gushort
中保存的最大值。这与标准 C
USHRT_MAX
相同,它在 C99 中提供,并且在新代码中应优先使用。
glong
相当于标准 C long
类型。
该类型的取值范围是从 LONG_MIN
到 LONG_MAX
,或者等价的从 G_MINLONG
到 G_MAXLONG
。
该类型仅为与 gulong
对称而存在。在新代码中应优先使用标准 C long
类型。
G_MINLONG
-
glong
中可保存的最小值。这与标准 C
LONG_MIN
相同,它在 C99 中提供,并且在新代码中应优先使用。 G_MAXLONG
-
glong
中可保存的最大值。这与标准 C
ULONG_MAX
相同,它在 C99 中提供,并且在新代码中应优先使用。
gulong
相当于标准 C unsigned long
类型。
该类型的取值范围是从 0
到 G_MAXULONG
。
在新代码中通常应优先使用标准 C unsigned long
类型,但 gulong
可用于类型名称必须为单个单词的上下文中,例如为 G_TYPE_ULONG
的 GType
名称,或者使用宏为多种类型生成函数名称系列时。
G_MAXULONG
-
gulong
中可保存的最大值。这与标准 C
ULONG_MAX
相同,它在 C99 中提供,并且在新代码中应优先使用。
固定宽度整数
gint8
一个有符号整数,保证在所有平台上都是 8 位,类似于标准 C int8_t
。
在新代码中应优先使用 int8_t
类型,除非为了与现有 API 的一致性需要使用 gint8
(有关更多详情,请参见 gsize
)。
该类型的取值范围是从 G_MININT8
(= -128)到 G_MAXINT8
(= 127)。
G_MININT8
-
gint8
中可保存的最小值。自:2.4
G_MAXINT8
-
gint8
中可保存的最大值。这与标准 C
INT8_MAX
相同,应在新代码中优先使用。自:2.4
guint8
一个无符号整数,保证在所有平台上都是 8 位,类似于标准 C uint8_t
。
在新代码中应优先使用 uint8_t
类型,除非为了与现有 API 的一致性需要使用 guint8
(有关更多详情,请参见 gsize
)。
该类型的取值范围是从 0
到 G_MAXUINT8
(= 255)。
G_MAXUINT8
-
guint8
中可保存的最大值。这与标准 C
UINT8_MAX
相同,应在新代码中优先使用。自:2.4
gint16
一个有符号整数,保证在所有平台上都是 16 位,类似于标准 C int16_t
。
在新代码中应优先使用 int16_t
类型,除非为了与现有 API 的一致性需要使用 gint16
(有关更多详情,请参见 gsize
)。
该类型的取值范围是从 G_MININT16
(= -32,768)到 G_MAXINT16
(= 32,767)。
若要打印或扫描该类型的值,请使用 G_GINT16_MODIFIER
和/或 G_GINT16_FORMAT
。
G_MININT16
-
gint16
中可保存的最小值。自:2.4
G_MAXINT16
-
gint16
中可保存的最大值。这与标准 C
INT16_MAX
相同,应在新代码中优先使用。自:2.4
G_GINT16_MODIFIER
-
用于转换形式说明符的基于平台的长度修饰符,用于扫描和打印类型为
gint16
或guint16
的值。它是一个字符串字面量,但不包括百分号,这样您可以在百分号和转换形式说明符之间添加精度和长度修饰符并附加一个转换 说明符。以下示例打印
0x7b
;c gint16 value = 123; g_print ("%#" G_GINT16_MODIFIER "x", value);
即使内存表示相同,这也不一定是用于打印和扫描
int16_t
值的正确修饰符。用于int16_t
的标准 C 宏(例如PRId16
和SCNd16
)应用于int16_t
。自:2.4
G_GINT16_FORMAT
-
这是基于平台的转换形式说明符,用于扫描和打印类型为
gint16
的值。它是一个字符串字面量,但不包括百分号,这样您可以在百分号和转换 说明符之间添加精度和长度修饰符。c gint16 in; gint32 out; sscanf ("42", "%" G_GINT16_FORMAT, &in) out = in * 1000; g_print ("%" G_GINT32_FORMAT, out);
即使内存表示相同,这也不一定是用于打印和扫描
int16_t
值的正确格式。用于int16_t
的标准 C 宏(例如PRId16
和SCNd16
)应用于int16_t
。
guint16
无符号整数,保证在所有平台上都是 16 位,类似于标准 C uint16_t
。
除非与现有 API 的一致性需要使用 guint16
(有关更多 详细信息,请参阅 gsize
),否则应在新代码中首选 uint16_t
类型。
此类型的值可以从 0
到 G_MAXUINT16
(= 65,535)。
要打印或扫描此类型的值,请使用 G_GINT16_MODIFIER
和/或 G_GUINT16_FORMAT
。
G_MAXUINT16
-
guint16
中可以保存的最大值。这与标准 C
UINT16_MAX
相同,在新 代码中应首选它。自:2.4
G_GUINT16_FORMAT
-
这是基于平台的转换形式说明符,用于扫描和打印类型为
guint16
的值。另请参见G_GINT16_FORMAT
即使内存表示相同,这也不一定是用于打印和扫描
uint16_t
值的正确修饰符。用于uint16_t
的标准 C 宏(例如PRIu16
和SCNu16
)应用于uint16_t
。
gint32
带符号整数,保证在所有 平台上都是 32 位。
除非与现有 API 的一致性需要使用 gint16
(有关更多 详细信息,请参阅 gsize
),否则应在新代码中首选 int32_t
类型。
此类型的值可以从 G_MININT32
(= -2,147,483,648)到 G_MAXINT32
(= 2,147,483,647)。
要打印或扫描此类型的值,请使用 G_GINT32_MODIFIER
和/或 G_GINT32_FORMAT
。
请注意,在具有多个 32 位标准整型类型的平台上,gint32
和 int32_t
不一定由相同的 32 位整型类型实现。例如,在 int
和 long
都是 32 位的 ILP32 平台上,可能的情况是其中一个类型是 int
,另一个是 long
。有关此含义的更多详细信息,请参见 gsize
。
G_MININT32
-
gint32
中可以保存的最小值。自:2.4
G_MAXINT32
-
gint32
中可以保存的最大值。这与标准 C
INT32_MAX
相同,在新 代码中应首选它。自:2.4
G_GINT32_MODIFIER
-
用于扫描和打印类型为
gint32
或guint32
值的转换说明符的与平台相关的长度修饰符。它是一个字符串文字。另请参阅G_GINT16_MODIFIER
。对于
int32_t
值,这未必是正确的打印和扫描修饰符,即使其内存表示形式相同。用于int32_t
的标准 C 宏(如PRId32
和SCNd32
)应被用于此目的。自:2.4
G_GINT32_FORMAT
-
用于扫描和打印类型为
gint32
值的与平台相关的转换说明符。另请参阅G_GINT16_FORMAT
。对于
int32_t
值,这未必是正确的打印和扫描修饰符,即使其内存表示形式相同。用于int32_t
的标准 C 宏(如PRId32
和SCNd32
)应被用于此目的。
guint32
一个无符号整数,在所有平台上都保证为 32 位,类似于标准 C 的 uint32_t
。
在新的代码中,uint32_t
类型应被优先使用,除非与现有 API 的一致性要求使用 guint32
(请参阅 gsize
了解更多详情)。
此类型的取值范围为 0
到 G_MAXUINT32
(= 4,294,967,295)。
若要打印或扫描此类型的取值,请使用 G_GINT32_MODIFIER
和/或 G_GUINT32_FORMAT
。
请注意,在具有多个 32 位标准整数类型的平台上,guint32
和 uint32_t
并不一定由相同的 32 位整数类型实现。请参阅 gsize
了解更多详情,以了解这意味着什么。
G_MAXUINT32
-
guint32
中可以容纳的最大值。这与标准 C 的
UINT32_MAX
相同,后者在新的代码中更可取。自:2.4
G_GUINT32_FORMAT
-
用于扫描和打印类型为
guint32
值的与平台相关的转换说明符。另请参阅G_GINT16_FORMAT
。对于
uint32_t
值,这未必是正确的打印和扫描修饰符,即使其内存表示形式相同。用于uint32_t
的标准 C 宏(如PRIu32
和SCNu32
)应被用于此目的。
gint64
一个有符号整数,在所有平台上都保证为 64 位,类似于标准 C 的 int64_t
。
在新的代码中,int64_t
类型应被优先使用,除非与现有 API 的一致性要求使用 gint64
(请参阅 gsize
了解更多详情)。
此类型的取值范围为 G_MININT64
(= -9,223,372,036,854,775,808)到 G_MAXINT64
(= 9,223,372,036,854,775,807)。
若要打印或扫描此类型的取值,请使用 G_GINT64_MODIFIER
和/或 G_GINT64_FORMAT
。
请注意,在具有多个 64 位标准整数类型的平台上,gint64
和 int64_t
并不一定由相同的 64 位整数类型实现。例如,在一个 long
和 long long
都是 64 位的平台上,一种情况是其中一个类型用于 gint64
,而另一个类型用于 int64_t
。请参阅 gsize
了解更多详情,以了解这意味着什么。
G_MININT64
gint64
中可以容纳的最小值。G_MAXINT64
gint64
中可以容纳的最大值。G_GINT64_MODIFIER
-
用于扫描和打印类型为
gint64
或guint64
值的转换说明符的与平台相关的长度修饰符。它是一个字符串文字。一些平台不支持打印 64 位整数,即使支持这些类型。在这种平台上,
G_GINT64_MODIFIER
未定义。对于
int64_t
值,这未必是正确的打印和扫描修饰符,即使其内存表示形式相同。用于int64_t
的标准 C 宏(如PRId64
和SCNd64
)应被用于此目的。自:2.4
G_GINT64_FORMAT
-
用于扫描和打印类型为
gint64
值的与平台相关的转换说明符。另请参阅G_GINT16_FORMAT
。即使支持相关类型,也有些平台不支持扫描和打印 64 位整数。在这些平台上,
G_GINT64_FORMAT
未定义。请注意,即使定义了G_GINT64_FORMAT
,scanf()
也不一定支持 64 位整数。由于错误处理能力较弱,通常不建议使用scanf()
进行分析;建议改用g_ascii_strtoull()
。即使内存中表示相同,这也不一定是用于打印和扫描
int64_t
值的正确格式。标准 C 宏(例如 `PRId64` 和 `SCNd64`)应用于 `int64_t`。 G_GINT64_CONSTANT(val)
-
此宏用于将 64 位整数文本插入源代码中。
它类似于应该在新代码中优先使用的标准 C
INT64_C
宏。
guint64
保证在所有平台上为 64 位的无符号整数,类似于标准 C uint64_t
类型。
在新的代码中,应优先使用 uint64_t
类型,除非与现有 API 的一致性要求使用 guint64
(有关更多详情,请参阅 gsize
)。
此类型的取值范围为从 0
到 G_MAXUINT64
(= 18,446,744,073,709,551,615)。
要打印或扫描此类型的取值,请使用 G_GINT64_MODIFIER
和/或 G_GUINT64_FORMAT
。
请注意,在具有多个 64 位标准整数类型的平台上,guint64
和 uint64_t
不一定由相同的 64 位整数类型实现。请参阅 gsize
了解更多有关这意味着什么的详细信息。
G_MAXUINT64
-
guint64
中可容纳的最大值。这与标准 C
UINT64_MAX
相同,在新的代码中应优先使用UINT64_MAX
。 G_GUINT64_FORMAT
-
这是用于扫描和打印类型
guint64
的取值的基于平台的转换说明符。另参见G_GINT16_FORMAT
。即使支持相关类型,也有些平台不支持扫描和打印 64 位整数。在这些平台上,
G_GUINT64_FORMAT
未定义。请注意,即使定义了G_GINT64_FORMAT
,scanf()
也不一定支持 64 位整数。由于错误处理能力较弱,通常不建议使用scanf()
进行分析;建议改用g_ascii_strtoull()
。即使内存中表示相同,这也不一定用于打印和扫描
uint64_t
值的正确修饰符。标准 C 宏(例如 `PRIu64` 和 `SCNu64`)应用于 `uint64_t`。 G_GUINT64_CONSTANT(val)
-
此宏用于将 64 位无符号整数文本插入源代码中。
它类似于应该在新代码中优先使用的标准 C
UINT64_C
宏。自:2.10
浮点数
gfloat
等同于标准 C float
类型。
此类型的取值范围为从 -FLT_MAX
到 FLT_MAX
,或者等同于 -G_MAXFLOAT
到 G_MAXFLOAT
。
G_MINFLOAT
-
gfloat
中可容纳的最小正值。如果您感兴趣的是
gfloat
中可容纳的最小值,请使用-G_MAXFLOAT
。这与标准 C
FLT_MIN
相同,该标准 C 自 C99 起可用,在新的代码中应优先使用。 G_MAXFLOAT
-
gfloat
中可容纳的最大值。这与标准 C
FLT_MAX
相同,自 C99 起提供,并且应该在新代码中优先使用。
gdouble
相当于标准 C double
类型。
此类型的取值范围从 -DBL_MAX
到 DBL_MAX
,或者从 -G_MAXDOUBLE
到 G_MAXDOUBLE
。
G_MINDOUBLE
-
gdouble
中可以容纳的最小正值。如果你对
gdouble
中能够容纳的最小值感兴趣,请使用-G_MAXDOUBLE
。这与标准 C
DBL_MIN
相同,自 C99 起提供,并且应该在新代码中优先使用。 G_MAXDOUBLE
-
gdouble
中可以容纳的最大值。这与标准 C
DBL_MAX
相同,自 C99 起提供,并且应该在新代码中优先使用。
架构大小的整型
gsize
未签名整型类型的 sizeof
运算符结果,对应 C99 中定义的 size_t
类型。
除非与现有 API 的一致性要求 gsize
(有关更多详细信息,请参见下方),否则在新的代码中应优先使用标准 size_t
类型。
gsize
通常在 32 位平台上为 32 位宽,在 64 位平台上为 64 位宽。此类型的取值范围从 0
到 G_MAXSIZE
。
此类型足够宽以容纳最大可能内存分配的大小,但不能保证足够宽以容纳指针的数值:在使用标记指针(如 CHERI)的平台上,指针的数值大小可能大于地址空间的大小。如果需要在不丢失信息的情况下将指针的数值存储在整数中,请使用标准 C 类型 intptr_t
或 uintptr_t
,或类似的 GLib 类型 gintptr
或 guintptr
。
若要打印或扫描此类型的取值,请使用 G_GSIZE_MODIFIER
和/或 G_GSIZE_FORMAT
。
请注意,在多个标准整数类型大小都相同的情况下,size_t
和 gsize
的大小始终相同,但它们不一定由相同的标准整数类型实现。例如,在 int
、long
和指针均为 32 位的 ILP32 平台上,size_t
可能为 unsigned long
,而 gsize
可能为 unsigned int
。如果两种类型不一致地使用,这可能导致编译器警告或意外的 C++ 名称修饰。
因此,在现有 API 中将类型从 gsize
更改为 size_t
可能是无法兼容的 API 或 ABI 更改,尤其是涉及 C++ 时。安全的方法是让现有 API 继续使用历史使用的相同类型,并且仅在新 API 中使用标准 C 类型。
对于所有固定大小类型(gint8
、guint8
、gint16
、guint16
、gint32
、guint32
、gint64
、guint64
和 goffset
),以及 gintptr
和 guintptr
,都适用于类似的注意事项。大小为 32 位或更大的类型尤其可能受到此问题的影响。
G_MAXSIZE
-
gsize
中可容纳的最大值。这与标准 C
SIZE_MAX
(自 C99 起提供) 相同,在新代码中应优先使用它。自:2.4
G_GSIZE_MODIFIER
-
扫描和打印
gsize
类型的值的转换说明符的平台相关长度修饰符。它是一个字符串文字。请注意,虽然内存中表示相同,但这不一定是对
size_t
进行扫描或打印的正确修饰词。如果可用与 C99 兼容的printf
实现,则应该对size_t
使用标准 C"z"
修饰词。自: 2.6
G_GSIZE_FORMAT
-
这是用于扫描和打印
gsize
类型值的与平台相关的转换说明符。另请参见G_GINT16_FORMAT
。请注意,虽然内存中表示相同,但这不一定是对
size_t
进行扫描或打印的正确格式。如果可用与 C99 兼容的printf
实现,则应该对size_t
使用标准 C"zu"
格式。自: 2.6
gssize
gsize
的有符号变体,对应于 POSIX 中定义的 ssize_t
或 Windows 中类似的 SSIZE_T
。
在新平台特定的代码中,请考虑直接使用 ssize_t
或 SSIZE_T
。
此类型的取值范围为从 G_MINSSIZE
到 G_MAXSSIZE
。
请注意,在实现 ssize_t
的平台上,ssize_t
和 gssize
可能会由不同但相同大小的标准整型实现。类似地,在 Windows 上,SSIZE_T
和 gssize
可能会由不同但相同大小的标准整型实现。请参见 gsize
了解更多详细信息。
此类型也不能保证与标准 C ptrdiff_t
相同,尽管它们在许多平台上相同。
要打印或扫描此类型的取值,请使用 G_GSSIZE_MODIFIER
和/或 G_GSSIZE_FORMAT
。
G_MINSSIZE
-
gssize
中可以保存的最小值。自: 2.14
G_MAXSSIZE
-
gssize
中可以保存的最大值。自: 2.14
G_GSSIZE_FORMAT
-
这是用于扫描和打印
gssize
类型值的与平台相关的转换说明符。另请参见G_GINT16_FORMAT
。请注意,虽然内存中表示相同,但这不一定是对 POSIX
ssize_t
或 WindowsSSIZE_T
进行扫描或打印的正确格式。在 POSIX 平台上,应将"zd"
格式用于ssize_t
。自: 2.6
G_GSSIZE_MODIFIER
-
用于扫描和打印
gssize
类型值的转换说明符的与平台相关的长度修饰词。这是一个字符串字面量。请注意,虽然内存中表示相同,但这不一定是对 POSIX
ssize_t
或 WindowsSSIZE_T
进行扫描或打印的正确修饰符。在 POSIX 平台上,应将"z"
修饰符用于ssize_t
。自: 2.6
goffset
用于文件偏移的有符号整型类型,对应于 POSIX 类型 off_t
,就好像在编译时将 _FILE_OFFSET_BITS
设置为 64。即使在 32 位架构上,goffset
始终为 64 位宽,即使 off_t
仅为 32 位。此类型的取值范围为从 G_MINOFFSET
到 G_MAXOFFSET
。
要打印或扫描此类型的取值,请使用 G_GOFFSET_MODIFIER
和/或 G_GOFFSET_FORMAT
。
在具有多个 64 位标准整型的平台上,即使 off_t
的大小也是 64 位,但 goffset
和 off_t
也未必由相同的 64 位整型实现。请参见 gsize
以了解此意味的详细信息。
自: 2.14
G_MINOFFSET
goffset
中可以保存的最小值。G_MAXOFFSET
goffset
中保存的最大值。G_GOFFSET_MODIFIER
-
用于转换说明符的平台相关长度修饰符,用于扫描和打印
goffset
类型的变量。它是一个字符串文本。另请参阅G_GINT64_MODIFIER
。此修饰符仅应用于
goffset
值,不应用于off_t
,后者不一定是相同类型或相同大小。自版本 2.20 起
G_GOFFSET_FORMAT
-
这是用于扫描和打印
goffset
类型的变量的平台相关转换说明符。另请参阅G_GINT64_FORMAT
。此格式仅应用于
goffset
值,不应用于off_t
,后者不一定是相同类型或相同大小。自版本 2.20 起
G_GOFFSET_CONSTANT(val)
-
此宏用于将
goffset
64 位整数文本插入至源代码。另请参阅
G_GINT64_CONSTANT()
。自版本 2.20 起
gintptr
对应于 C99 类型 intptr_t
,一种有符号整数类型,可以保留所有指针。
在新代码中,应首选标准的 intptr_t
类型,除非与现有 API 的一致性要求 gintptr
。请注意,intptr_t
和 gintptr
可能由不同标准的同等大小的整数类型实现。有关更多详细信息,请参阅 gsize
。
gintptr
不能保证为相同类型或相同大小的 gssize
,即使它们在许多 CPU 体系结构中相同。
要打印或扫描此类型的变量,请使用 G_GINTPTR_MODIFIER
和/或 G_GINTPTR_FORMAT
。
自版本 2.18 起
G_GINTPTR_MODIFIER
-
用于转换说明符的平台相关长度修饰符,用于扫描和打印
gintptr
或guintptr
类型的变量。这是一个字符串文本。请注意,即使内存中表示相同的值,也不是扫描或打印
intptr_t
的必要的修饰符。标准 C 宏(如PRIdPTR
和SCNdPTR
)应用于intptr_t
。自版本 2.22 起
G_GINTPTR_FORMAT
-
这是用于扫描和打印
gintptr
类型的变量的平台相关转换说明符。请注意,即使内存中表示相同的值,也不是扫描或打印
intptr_t
的必要的格式。标准 C 宏(如PRIdPTR
和SCNdPTR
)应用于intptr_t
。自版本 2.22 起
guintptr
对应于 C99 类型 uintptr_t
,一种无符号整数类型,可以保留所有指针。
在新代码中,应首选标准的 uintptr_t
类型,除非与现有 API 的一致性要求 guintptr
。请注意,uintptr_t
和 guintptr
可能由不同标准的同等大小的整数类型实现。有关更多详细信息,请参阅 gsize
。
guintptr
不能保证为相同类型或相同大小的 gsize
,即使它们在许多 CPU 体系结构中相同。
要打印或扫描此类型的变量,请使用 G_GINTPTR_MODIFIER
和/或 G_GUINTPTR_FORMAT
。
自版本 2.18 起
G_GUINTPTR_FORMAT
-
这是用于扫描和打印
guintptr
类型的变量的平台相关转换说明符。请注意,即使内存表示形式相同,这也不一定是正确的格式来扫描或打印
uintptr_t
。应将PRIuPTR
和SCNuPTR
等标准 C 宏用于uintptr_t
。自版本 2.22 起