【发布时间】:2010-05-24 17:54:08
【问题描述】:
这个大型应用程序有一个内存池库,它在内部使用一个trap 来存储内存节点。 treap 是使用 cpp 宏实现的,完整的文件 trp.h 可以在here 找到。我尝试编译应用程序时收到以下编译器警告:
warning: this decimal constant is unsigned only in ISO C90
通过删除部分宏代码并反复试验,我终于找到了罪魁祸首:
#define trp_prio_get(a_type, a_field, a_node) \
(2654435761*(uint32_t)(uintptr_t)(a_node))
我不确定那个奇怪的数字在那里做什么,但我认为它的存在是有充分理由的,所以我只想不理它。我确实想修复警告 - 知道为什么编译器会说它仅在 ISO C90 中是无符号的吗?
编辑:我使用的是 gcc-4.1
【问题讨论】:
-
告诉我们您使用的是什么编译器会很有帮助。
-
警告的存在也是有原因的。它告诉您文字的类型已从一个 C 版本更改为另一个,因此无论原始开发人员提出的任何充分理由现在都可能是错误的,这可能会以有趣的方式破坏您的代码。
标签: c compiler-warnings