C - Glib GINT_TO_POINTER 可移植性

标签 c performance portability glib

我正在处理来自哈希表的大量数字。我想知道考虑到可移植性,将它们添加到常量 (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)); // ?

最佳答案

我对gnome库不熟悉,但是来自GNOME Documentation Library :

YOU MAY NOT STORE POINTERS IN INTEGERS. THIS IS NOT PORTABLE IN ANY WAY SHAPE OR FORM. These macros ONLY allow storing integers in pointers, and only preserve 32 bits of the integer; values outside the range of a 32-bit integer will be mangled.

唯一不可移植的是用整数存储指针。如果你只是:

  • 用指针存储整数。 (不是整数指针)。
  • 整数不超过32位。

应该没问题的。

关于C - Glib GINT_TO_POINTER 可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3499281/

相关文章:

mysql - 表的所​​有列都应该被索引还是不应该是mysql数据库?

c - 为什么要在 .c 文件中避免使用#ifdef?

c - 来自具有多个指标的文件的 gnuplot

javascript - 过滤器与从已加载数据中查找之间的 jQuery 性能测试

android - mterp (Dalvik VM) 如何组织其字节码解释循环?

python - python标准库的哪些部分保证可用?

windows - 移动应用程序从 Windows Mobile 5.0 到 Windows Mobile 6.5 的可移植性

python - 在一个 Bundle 中轻松部署 Python 和应用程序,适用于 Linux

c - C 中的文本(字母)到数字

c - 如何遍历数组中字符串的字符?