【发布时间】:2016-08-16 11:56:59
【问题描述】:
我有一个返回枚举的函数指针
我的枚举是
typedef enum {
FIRST,
SECOND,
THIRD
} STATUS;
在代码中,有人试图将基地址分配为
STATUS (*start_port)(void *,void *)= 0x80000001;
但它正在抛出警告
“初始化使指针从整数不进行强制转换”
还有
“ISO C90 禁止混合声明和代码 [-Wdeclaration-after-statement]”
我把声明分开了
STATUS (*start_port)(void *,void *);
然后尝试通过以下方式将地址分配给函数指针
start_port = (unsigned int *)0x80000001;
它更正了混合声明警告,但出现了一个新错误
“来自不兼容指针类型的赋值”
当返回值为枚举时,我想知道如何正确地将函数指针类型转换为固定(常量)基地址。
【问题讨论】:
-
所以你要调用的函数的代码实际上是在地址
0x80000001? -
变量
start_port是一个指向函数的指针。您必须将值转换为正确的类型。 -
回复。 c90 警告:使用标准 C,即 C11,或至少是现代 C99。除非您真的必须维护一些旧代码,否则不要使用 mideval C90。
-
@Olaf 一些较小的嵌入式平台(我猜 OP 正在使用,考虑到初始化)没有最新的编译器。
-
@achoora:关于编译器还是 C 版本?无论如何,有了这样的镇流器,你必须忍受这个。只需按照错误消息进行操作即可。但是您不能将整数或对象指针合规地转换为函数指针。所有版本都是如此。