2013-01-16 69 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