我必须在 Linux 上使用 gcc 维护一大块源代码,它具有以下函数原型(prototype):
int foo(const void*, ...)
我必须将一个整数传递给这个函数。我知道这是个坏主意,但在这个阶段,我不允许修改源代码。
即我必须调用 foo(n)
(n
定义为 int n
)
在 64 位机器上,我得到一个错误:
cast to pointer from integer of different size
据我了解,这是因为 32 位机器上整数的大小为四个字节,而指向 void 的指针的大小为八个字节。
我通过首先将大小为 4 字节的整数转换为大小为 8 字节的长整数来解决编译错误。所以我做了 foo((long)n)
我想知道这是处理这个问题的可接受方式还是有其他建议?
最佳答案
您可以使用 intptr_t
,但它是可选的并且在 stdint.h
中可能不可用:
intptr_t n = 1;
foo((void*)n);
关于从不同大小的整数转换为指针(将 int 作为 const void * 参数传递),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19358410/