在 C 语言中,使用 IAR 编译器用于 Cortex uC。假设您有三个函数,例如:
Type_enum_1 get_parameter_alpha(void);
Type_enum_2 get_parameter_beta(void);
Type_enum_3 get_parameter_gamma(void);
我想知道是否可以声明一个可以分配给上述每个函数的函数指针。我试过使用:
uint8_t (*getter_ptr)(void)
或者
void (*getter_ptr)(void)
但编译器无法接受赋值
getter_ptr = get_parameter_alpha
有针对这个的解决方法吗?
谢谢
返回类型是函数签名的一部分,因此有编译器不把枚举拖泥带水,你将无法声明函数指针类型,覆盖了所有三项功能,只要Type_enum_1
,Type_enum_2
和Type_enum_3
不正好是相同的。
但是,您可以做的是利用enum
s 基本上是查看整数的不同方式这一事实,因此作为一种解决方法,您可以实现三个代理函数
int get_parameter_alpha_proxy(void) { return (int)get_parameter_alpha(); }
int get_parameter_beta_proxy(void) { return (int)get_parameter_beta(); }
int get_parameter_gamma_proxy(void) { return (int)get_parameter_gamma(); }
这三个可以分配给一个类型的点int (*getter_ptr)(void)
- 但是,如果所涉及的三个枚举具有重叠/不明确的值(大多数情况下都是这种情况),则返回的整数值的解释将不简单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句