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标准,这可能是它拥有自己的一组类型的原因.
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 标准通过提供新类型使它们变得过时