1

我必须使用 gcc 在 Linux 上维护一大块源代码,它具有以下函数原型:

int foo(const void*, ...)

我必须将一个整数传递给这个函数。我知道这是一个坏主意,但在这个阶段,我不允许修改源代码。

即我必须调用foo(n)n定义为int n

在 64 位机器上,我收到一个错误:

cast to pointer from integer of different size

据我了解,这是因为 32 位机器上的整数大小为 4 个字节,而指向 void 的指针大小为 8 个字节。

我通过首先将大小为 4 字节的整数转换为大小为 8 字节的 long 来解决编译错误。所以我做了foo((long)n)

我想知道这是否是处理这个问题的一种可接受的方式,还是有其他建议?

4

1 回答 1

2

您可以使用intptr_t,但它是可选的,可能不适用于stdint.h

intptr_t n = 1;
foo((void*)n);
于 2013-10-14T11:21:50.660 回答