我写了一个函数来测试函数。我想要灵活,这就是函数指针的原因。
我的代码正常运行,但有可能避免下面的警告吗? 我想过一个演员。
所以我尝试在(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
答案 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
来使它们更清晰。
当然,如果您的系统中UINT32
和ULONG
这两种类型不同,那么这将会非常糟糕。