我对使用预定义回调类型定义函数感兴趣。
假设我已经定义了回调类型:
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(使用前将#替换为@)