可能重复:
为什么 glib 重新定义类型?
在 GTK+ 2.0 教程中,我可以在这里阅读以下关于数据类型的声明:
您可能在前面的示例中注意到了一些需要解释的事情。您看到的 gint、gchar 等分别是 int 和 char 的 typedef,它们是 GLib 系统的一部分。这样做是为了在进行计算时绕过对简单数据类型大小的讨厌的依赖。
我不明白这个解释的最后一部分。为什么使用 Glib 数据类型更好?
可能重复:
为什么 glib 重新定义类型?
在 GTK+ 2.0 教程中,我可以在这里阅读以下关于数据类型的声明:
您可能在前面的示例中注意到了一些需要解释的事情。您看到的 gint、gchar 等分别是 int 和 char 的 typedef,它们是 GLib 系统的一部分。这样做是为了在进行计算时绕过对简单数据类型大小的讨厌的依赖。
我不明白这个解释的最后一部分。为什么使用 Glib 数据类型更好?
正如教程中提到的,这是为了确保可移植性。在新系统上构建使用 glib 的代码时,您只需使用 typedefs 修改头文件,而不是使用这些类型的代码。
C99 标准添加了固定宽度类型(int8_t、uint32_t 等),这将使 glib 类型过时,但 glib 早于 C99 标准,这可能是它拥有自己的类型集的原因。
C 数据类型是高度平台和特定于实现的,例如 int 通常是通用寄存器的大小,char 具有与字节一样多的位,long 仅表示不小于 int(但至少 32 位)short int至少是 2 个字节,但实际上不需要小于 int
因此,使用一些正确命名的短变量有利于可移植性。
正如 GTK 2.0 教程所说:
一个很好的例子是“gint32”,对于任何给定的平台,无论是 64 位 alpha 还是 32 位 i386,它都将被 typedef 为 32 位整数。typedef 非常简单直观。它们都在 glib/glib.h 中定义(包含在 gtk.h 中)。
编辑:正如迈克尔所说,C99 标准通过提供新类型使它们过时