2013-01-16 70 views
0

我写了一个函数来测试函数。我想变得灵活,这就是函数指针的原因。函数指针,如何投射?

我的代码正在工作,但有没有可能避免下面的警告? 我想过演员。

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

你能帮我吗?

ULONG tickGet (void); 

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

WCET_Measurement(&tickGet); 

编译器警告

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

为什么要同时使用ULONG和UINT32?你有尝试过使用其中之一吗? – Dariusz

回答

1

你投的尝试是错误的。

您需要:

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

这往往好使用typedef函数指针,使他们更清楚。

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

+0

Sry我得到了这个 - >错误:解析错误之前')'令牌 – user1829804

+0

SORRY,不知道什么,但这是我的错 – user1829804

3

铸造函数指针是明确定义的。但是,通过不兼容的指针调用函数是未定义的行为。因此,如果UINT32ULONG是不同的类型,那么情况就会错误。

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

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

或者更好的是,使用typedef

typedef UINT32 (*MyFunc)(void); 

WCET_Measurement((MyFunc)&tickGet); 
+0

Sry我也得到了这个 - >错误:解析错误之前')'令牌 – user1829804

+0

@ user1829804:你确定你精确地复制了我的例子吗? –

+0

抱歉,不知道但是这是我的错 – user1829804