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

rem*_*mjg 16 types typedef glib

可能重复:
为什么glib重新定义类型?

在GTK + 2.0教程中,我可以在这里阅读以下关于数据类型的声明:

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

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

Mic*_*ael 10

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

C99标准添加了固定宽度类型(int8_t,uint32_t等),这会使glib类型过时,但glib早于C99标准,这可能是它拥有自己的一组类型的原因.

  • 这就是我所理解的......例如gint和gchar对于可移植性来说是无用的.在C99标准之前,只有gint32和Glib添加的每个固定大小的数据类型都很有趣,因为它们确保变量具有最小的所需大小.我对吗 ? (2认同)

a3f*_*a3f 5

C 数据类型是高度平台和实现特定的,例如 int 通常是通用寄存器的大小,char 具有与字节一样多的位,long 仅意味着不小于 int(但至少 32 位)short int至少 2 个字节,但不需要实际小于 int

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

正如 GTK 2.0 教程所说:

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

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