gpt4 book ai didi

将整数转换为函数指针

转载 作者:行者123 更新时间:2023-11-30 18:21:23 25 4
gpt4 key购买 nike

我正在尝试将整数转换为函数指针。基本上我的整数值包含函数指针的地址,因此我尝试将其转换为函数指针。

我正在尝试执行以下操作-

typedef void (*func_ptr)(unsigned int arg1);

void function1(unsigned int argument)
{
}

void function2(unsigned int argument, func_ptr argument2)
{
/* Do something here*/
}

void function3(unsigned int argument)
{
function2(123,(func_ptr)argument);
}

我正在调用 function3,其参数包含 function1 的地址。当我运行该程序时,我收到以下警告 -

cast to pointer from integer of different size [-Wint-to-pointer-cast]

有什么办法可以处理这个警告吗?

最佳答案

Cast integer to function pointer
"I wish to make it system independant"

这并不是 100% 可能的,因为 C 没有指定可以容纳所有原始函数指针的整数类型。

An integer may be converted to any pointer type. Except as previously specified, the result is implementation-defined, might not be correctly aligned, might not point to an entity of the referenced type, and might be a trap representation. C11dr §6.3.2.3 5

走另一条路:

Any pointer type may be converted to an integer type. Except as previously specified, the result is implementation-defined. If the result cannot be represented in the integer type, the behavior is undefined. The result need not be in the range of values of any integer type. §6.3.2.3 6

示例:函数指针为 128 位,最宽整数类型为 64 位。

代码可以尝试使用最宽的整数类型,例如(u)intmax_t。尽管这确实有很高的成功机会,但在选定的平台上它仍然可能太小。

<小时/>

(u)intptr_t这样的可选整数类型可以往返void *对象指针函数指针可能比void *更宽,因此这种方法对于独立于系统的解决方案来说是不够的。

关于将整数转换为函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48605278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com