2013-01-16 3 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 사용.

당신이 필요합니다

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

그것은 함수 포인터와 typedef를 사용하는 것이 좋은가, 그들을 명확하게 할 수 있습니다.

물론 두 종류의 UINT32ULONG이 시스템에서 다를 경우이 작업은 끔찍한 일입니다.

+0

Sry 내가이 -> 오류 : ')'토큰 전에 구문 분석 오류가있어 – user1829804

+0

죄송하지만 무슨 일인지 모르겠어. 그건 내 잘못이야. – user1829804

3

경고 잘 정의이다. 그러나 호환되지 않는 포인터를 통해 함수를 호출하면 정의되지 않은 동작이 발생합니다. 따라서 UINT32이 과 다른 유형 인 경우 문제가 발생합니다.

하지만 당신이 정말로 캐스팅하려는 경우, 당신은이 작업을 수행 할 수 있습니다

typedef UINT32 (*MyFunc)(void); 

WCET_Measurement((MyFunc)&tickGet); 
+0

Sry 나는 또한 this -> error : ')'토큰 앞에서 구문 분석 오류가 발생했습니다. – user1829804

+0

@ user1829804 : 예제를 정확하게 복사 했습니까? –

+0

죄송하지만 무슨 뜻인지 모르겠다. 내 잘못이 아니었다. – user1829804