Types 为什么使用Glib数据类型(例如'gint'而不是'int')更好?

Types 为什么使用Glib数据类型(例如'gint'而不是'int')更好?,types,typedef,glib,Types,Typedef,Glib,可能重复: 在GTK+2.0教程中,我可以阅读以下关于数据类型的语句: 在前面的示例中,您可能注意到了一些需要解释的事情。您看到的gint、gchar等分别是typedef到int和char,它们是GLib系统的一部分这样做是为了在进行计算时避免对简单数据类型大小的严重依赖。 我不明白这个解释的最后一部分。为什么使用Glib数据类型更好?正如教程所提到的,这是为了确保可移植性。在新系统上构建使用glib的代码时,您只需使用typedefs修改头文件,而不必修改使用这些类型的代码。 C99标准增

可能重复:

在GTK+2.0教程中,我可以阅读以下关于数据类型的语句:

在前面的示例中,您可能注意到了一些需要解释的事情。您看到的gint、gchar等分别是typedef到int和char,它们是GLib系统的一部分这样做是为了在进行计算时避免对简单数据类型大小的严重依赖。


我不明白这个解释的最后一部分。为什么使用Glib数据类型更好?

正如教程所提到的,这是为了确保可移植性。在新系统上构建使用glib的代码时,您只需使用typedefs修改头文件,而不必修改使用这些类型的代码。


C99标准增加了固定宽度类型(int8_t、uint32_t等),这将使glib类型过时,但glib早于C99标准,这可能是它有自己类型集的原因。

C数据类型高度平台化和实现特定性 例如int是寄存器的大小, char的位数和字节的位数一样多, long仅表示不小于int short int至少为2个字节,但不要求实际小于int

因此,使用一些短的、正确命名的变量有利于可移植性

正如GTK 2.0教程所说:

一个很好的例子是“gint32”,对于任何给定的平台,无论是64位alpha还是32位i386,它都将被类型定义为32位整数。typedef非常简单直观。它们都是在glib/glib.h(包含在gtk.h中)中定义的


编辑:正如Michael所说,C99标准通过提供新类型使其过时

以下是我的理解。。。例如,gint和gchar对于可移植性来说就是无用的。在C99标准之前,只有gint32和Glib添加的每个固定大小的数据类型是有趣的,因为它们确保变量具有所需的最小大小。我说的对吗?你可能是对的。尽管有可能人们依赖于gint来达到一定的大小,或者至少32位或类似的大小。要点是,更改单个typedef以满足任何此类要求比更改代码中使用Int的每个位置更容易。没错,
gint
gchar
没有定义为特定大小,因此没有理由使用它们。另请参见此处的评论:谢谢您的回答!