转换为函数指针

问题描述 投票:26回答:4

我遇到了下面显示的代码行。

我认为这可能是强制转换为返回void并采用void指针的函数指针。正确吗?

(void (*)(void *))SGENT_1_calc
c function-pointers
4个回答
37
投票

是的,这是正确的。我发现它不是很可读,所以我建议声明要指出的功能的签名:

 typedef void sigrout_t(void*);

我也有coding Convention,以rout_t结尾的类型就是函数签名的类型。您可能会用其他方式命名,因为_treserved的后缀POSIX

稍后我正在投射,也许这样称呼

 ((sigrout_t*) SGENT_1_calc) (someptr);

5
投票

是,是的。该函数应如下所示

void func(void*);

但是该语句缺少目标,因为强制转换为空是没有用的。所以应该像

func = (void (*)(void *))SGENT_1_calc;

0
投票

是其函数指针,您可以将其分配给具有原型无效函数的函数funcname(void *)SGENT_1_calc可以直接分配给funcname


0
投票

是的,这是您所说的演员。

© www.soinside.com 2019 - 2024. All rights reserved.