函数指针,怎么投?

时间:2013-01-16 14:17:52

标签: c casting function-pointers

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

我的代码正常运行,但有可能避免下面的警告吗? 我想过一个演员。

所以我尝试在(UINT32 *)前面设置&tickGet,但它无效。

你能帮助我吗?

ULONG tickGet (void);

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

WCET_Measurement(&tickGet);

编译器警告

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

2 个答案:

答案 0 :(得分:3)

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

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

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

或者更好的是,使用typedef

typedef UINT32 (*MyFunc)(void);

WCET_Measurement((MyFunc)&tickGet);

答案 1 :(得分:1)

你的演员尝试错了。

你需要:

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

通常使用带有函数指针的typedef来使它们更清晰。

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