是否可以使用回调类型定义来定义函数?

2023-11-29

我对使用预定义回调类型定义函数感兴趣。

假设我已经定义了回调类型:

typedef BOOL (*is_trigger_required_cb)(void);

现在我想使用上述类型声明并定义一个函数。

我想做这样的事情:

is_trigger_required_cb my_func { /* function implementation which accepts void and returns BOOL */ }

由于以下原因,这不会编译:

错误:预期为“;”在顶级声明符之后

据我了解,这是不可能的,因为编译器仅将回调类型称为类型安全函数指针,并且不能用于函数定义。如果回调类型发生变化,它将破坏编译,从而保持类型安全。


类型定义is_trigger_required_cb不是函数类型的别名,而是指向函数的指针。此外C11 6.9.1p2

函数定义中声明的标识符(即函数的名称)应具有函数类型,由函数定义的声明符部分指定。 [162]

脚注 162 说

162) 目的是函数定义中的类型类别不能从 typedef[...] 继承

也就是说,你就是做不到 - 原因很明显 - 功能type才不是name参数,因此它不能用于在函数体内声明参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用回调类型定义来定义函数? 的相关文章