0

我写了一个函数来测试函数。我想要灵活,这就是函数指针的原因。

我的代码正在运行,但是否有可能避免以下警告?我想到了演员表。

所以我尝试(UINT32 *)在 前面设置 a &tickGet,但它不起作用。

你能帮助我吗?

ULONG tickGet (void);

void WCET_Measurement(UINT32 (*Function)(void)){}

WCET_Measurement(&tickGet);

编译器警告

warning: passing arg 1 of `WCET_Measurement' from incompatible pointer type
4

2 回答 2

3

转换函数指针是明确定义的。但是,通过不兼容的指针调用函数是未定义的行为。因此,如果UINT32是与 a 不同的类型ULONG,那么事情就会出错。

但如果你真的想投,那么你可以这样做:

WCET_Measurement((UINT32 (*)(void))&tickGet);

或者更好的是,使用typedef

typedef UINT32 (*MyFunc)(void);

WCET_Measurement((MyFunc)&tickGet);
于 2013-01-16T14:21:41.217 回答
1

你的施法尝试是错误的。

你需要:

WCET_Measurement(((UINT32)(*)(void)) tickGet);

使用带有函数指针的 a 通常很好typedef,可以使它们更清晰。

当然,如果这两种类型在您的系统UINT32ULONG不同,这将非常糟糕。

于 2013-01-16T14:22:18.563 回答