我想知道使用简单整数和memsize的正确方法是什么?准确地说, 我有一个最初为 32 位架构编写的 C 代码。现在它必须运行到这两种架构中,因此在 64 位架构中运行时有明显的原因会收到以下警告
warning: cast to pointer from integer of different size
我正在尝试使用 memsize、intptr_t
和 uintptr_t
删除这些警告。但我怀疑如果我们使用混合的简单整数和内存大小它是否可以正常工作。我想知道正确的使用方法。以下是代码示例。
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);
这两种方法都有效。但我不确定哪种方法是合法且最好的? 寻找一些建议。
谢谢
最佳答案
最大的问题是你是否真的必须混合使用指针和整数。 (这种情况的少数情况是在处理类似 lisp 的通用数据结构时。)如果没有,您应该使用正确的类型,并且仅使用该类型。
但是,如果是这种情况,您真的需要使用相同的函数来处理它们吗?例如,您可以让 list_Cons_pointer
和 list_Cons_int
分别接受实际指针和与预索引
匹配的整数类型。
是否应该更改预索引
的类型实际上取决于它在程序中代表的内容。
除此之外,intptr_t
保证足够大以容纳指针,但它可能会更大。这意味着确实没有办法消除所有可能环境中的所有警告(想想 48 位指针......)
关于c - 使用简单整数和内存大小的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5758074/