【问题标题】:Why is it better to use Glib data types (e.g. `gint` instead of `int`)? [duplicate]为什么使用 Glib 数据类型更好(例如 `gint` 而不是 `int`)? [复制]
【发布时间】:2022-02-21 23:20:05
【问题描述】:

可能重复:
Why does glib redefine types?

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

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

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

【问题讨论】:

    标签: types typedef glib


    【解决方案1】:

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

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

    【讨论】:

    • 这就是我所理解的......例如 gint 和 gchar 对可移植性毫无用处。在 C99 标准之前,只有 gint32 和 Glib 添加的每个固定大小的数据类型是有趣的,因为它们确保变量具有所需的最小大小。我说的对吗?
    • 你可能是对的。尽管人们可能依赖于例如gint 具有一定的大小,或至少 32 位或类似的大小。关键是更改单个 typedef 以满足任何此类要求比更改代码中使用 int 的每个位置更容易。
    • 你是对的,gintgchar 没有定义为一定的大小,所以没有理由使用它们。另请参阅此处的评论:stackoverflow.com/questions/2800310/…
    • 感谢您的回答!
    【解决方案2】:

    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 标准通过提供新类型使它们过时

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2012-12-20
      • 1970-01-01
      • 2013-12-27
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多