【发布时间】:2011-08-11 02:43:05
【问题描述】:
我想知道使用简单整数和 memsize 的正确方法是什么?准确地说, 我有一个最初为 32 位架构编写的 C 代码。现在它必须同时运行在这两种架构中,所以在 64 位架构中运行时,有明显的理由得到以下警告
warning: cast to pointer from integer of different size
我正在尝试使用 memsize、intptr_t 和 uintptr_t 删除这些警告。但我怀疑如果我们使用混合的简单整数和 memsizes 是否能正常工作。我想知道使用它的正确方法。以下是代码示例。
compllits = list_Cons((POINTER) predindex, compllits);
这里compllits是一个链表,定义为pointer。 list_Cons 返回指针。 list_Cons 定义为:
list_Cons(POINTER x, LIST y);
还有, int preindex。我将整数转换为指针。当我在 64 位机器上运行它时,我会收到警告
: warning: cast to pointer from integer of different size
现在要解决这个警告,我对我使用的两种方法有点困惑,
Method 1: changing the int preindex into intptr_t preindex.
Method 2. Keeping int preindex unchanged but doing following
compllits = list_Cons((POINTER)(intptr_t)predindex, compllits);
两种方式都有效。但我不确定哪种方法合法且最好? 寻找一些建议。
谢谢
【问题讨论】:
-
我正在使用 intptr_t 以便根据硬件架构确定整数的大小,并且我不会收到问题中提到的警告。
标签: c compiler-construction casting 32bit-64bit compiler-warnings