我必须在Linux上使用gcc维护一大堆源代码,其中包含以下函数原型:
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)
我想知道这是否是一种可接受的方式来处理这个问题还是有其他建议?
答案 0 :(得分:2)
您可以使用intptr_t
,但它是可选的,可能无法在stdint.h
中使用:
intptr_t n = 1;
foo((void*)n);