我正在处理来自哈希表的大量数字。我想知道将它们添加到常量(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)); // ?
答案 0 :(得分:5)
我不熟悉gnome库,但是来自GNOME Documentation Library:
你可能不会存入指针 INTEGERS。这在任何情况下都不是便携式的 方式或形式。 仅限这些宏 允许在指针中存储整数, 并且只保留32位 整数; 超出范围的值 32位整数将被破坏。
唯一不可移植的是将指针存储为整数。如果您只是:
没关系。
答案 1 :(得分:0)
不是在指针中存储整数,而是将指针指向整数:
gpointer v, old_key;
int *int_v;
if(g_hash_table_lookup_extended(table, key, &old_key, &v)){
int_v = (int *)v;
int new_value = *int_v + 100;
int_v = g_malloc(sizeof(int));
*int_v = new_value;
}
g_hash_table_replace(table, g_strdup(key), int_v);
要获取新值,请使用g_malloc
:
// ...
int *value = g_malloc(sizeof(int));
// ...
g_hash_table_insert(table, key, value);
要确保正确销毁键和值,请将析构函数(如g_free
)传递给g_hash_table_new_full
。