【发布时间】:2015-08-10 18:36:25
【问题描述】:
编辑:我特意询问的是非固定尺寸类型,而不是固定尺寸类型。如前所述,我了解使用它们的(历史)目的。
在我当前的代码库中,我通常会看到 Glib 类型,例如 gint、guint、gboolean、gpointer 等。
查看头文件,它们只是标准 C 类型的新名称:
typedef char gchar;
typedef short gshort;
typedef long glong;
typedef int gint;
typedef gint gboolean;
typedef void* gpointer;
使用这些类型定义的目的是什么?在我看来,我们只是在隐藏信息,尤其是在 gpointer 类型化为非指针签名的情况下。还有 gboolean 用于代替 C99 中的 C 标准布尔值(_Bool 被定义为单字节类型,而不是例如 AMD64 Sys V ABI 和 ARMv7 ABI 中的 int)。
在我们有 stdint 之前,我了解固定宽度 typedef 的目的,也许还有在 stdbool 之前的 gboolean,但是在 2015 年使用这些类型有什么真正的好处?
【问题讨论】:
-
历史可移植性原因。 (在 C99 标准化之前)
-
@MohitJain 这是一个类似的问题,但 IMO 没有完全回答。
-
@MohitJain 也就是说,答案都是关于固定大小的类型,这不是我要问的。