【发布时间】:2017-10-02 07:29:26
【问题描述】:
我正在使用一个使用返回 guint 的 API 函数 (https://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-size) 的 C 代码库。我需要将其作为 int 传递给下游。我想知道有没有办法做到这一点?
我搜索了文档和谷歌,但没有找到。
【问题讨论】:
标签: c type-conversion glib
我正在使用一个使用返回 guint 的 API 函数 (https://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-size) 的 C 代码库。我需要将其作为 int 传递给下游。我想知道有没有办法做到这一点?
我搜索了文档和谷歌,但没有找到。
【问题讨论】:
标签: c type-conversion glib
这些 typedef 的存在让我感到困惑。检查glib/gtypes.h:
typedef char gchar;
typedef short gshort;
typedef long glong;
typedef int gint;
typedef gint gboolean;
typedef unsigned char guchar;
typedef unsigned short gushort;
typedef unsigned long gulong;
typedef unsigned int guint;
所以unsigned int和guint之间不需要转换,它们是相同的类型。
适用于在 unsigned int 和 int 之间转换的常见警告。
【讨论】:
gint32 和类似存在的解释;但据我所知,gint 在所有平台上都是平台定义的int;类似的其他类型没有特定的大小。那么他们服务的目的是什么? gint、gchar等的存在,总让我觉得做作。
gint32 这样的十几个类型,我认为老实说只是为了保持一致性。快进几十年它有点烦人,但它不像gint32 并且可以在不破坏 API 的情况下删除朋友。