C - Glib GINT_TO_POINTER 可移植性
我正在处理来自哈希表的大量数字。我想知道考虑到可移植性,将它们添加到常量(100)的好方法是什么。 Glib 的文档强调,使用 GINT_TO_POINTER 无论如何都不可移植。任何想法将不胜感激!
gpointer v, old_key;
gint value; // ?
if(g_hash_table_lookup_extended(table, key, &old_key, &v)){
value = GPOINTER_TO_INT(v); // ?
value = value + 100;
}
g_hash_table_replace(table, g_strdup(key), GINT_TO_POINTER(value)); // ?
I'm dealing with large numbers coming from the hash table. I'm wondering what would be a good way of adding them to a constant (100) taking into account portability. Glib's documentation highlights that using GINT_TO_POINTER is not portable in any way. Any ideas would be appreciated!
gpointer v, old_key;
gint value; // ?
if(g_hash_table_lookup_extended(table, key, &old_key, &v)){
value = GPOINTER_TO_INT(v); // ?
value = value + 100;
}
g_hash_table_replace(table, g_strdup(key), GINT_TO_POINTER(value)); // ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我不熟悉 gnome 库,但来自 GNOME 文档库:
唯一不可移植的是将指针存储在整数中。如果您只是:
应该没问题的。
I am not familiar with gnome library, but from GNOME Documentation Library:
The only thing not portable is to store pointers in integers. If you just:
It shall be okay.
不要将整数存储在指针内,而是让指针指向整数:
对于新值,请使用 g_malloc:
为了确保正确销毁键和值,请传递析构函数,例如 g_free< /code> 到
g_hash_table_new_full
。Rather than storing an integer inside a pointer, have the pointer point to an integer:
For a new value, use
g_malloc
:To ensure keys and values are destroyed properly, pass destructor functions like
g_free
tog_hash_table_new_full
.