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