2013-10-09 2 views
3

아래 코드를 시도했습니다.함수 포인터 타입 변환

int TestMethod(int a, int b) 
{ 
    printf("In TestMethod %d, %d \r\n", a, b); 
    return 0; 
} 


int main(void) 
{ 

    void (*ap_cb_function)() = (void(*)())TestMethod; 
    ap_cb_function(); 

    return 0; 
} 

gcc 컴파일러와 잘 작동합니다. 그러면 출력이 a와 b의 임의의 값으로 인쇄됩니다. 이게 어떻게 작동합니까?

void (*ap_cb_function)() = (void(*)())TestMethod; 
+0

"gcc 컴파일러에서 잘 작동합니다."컴파일러 isn 프로그램을 실행하지 않습니다. 그게 얼마나 나쁜지에 상관없이 당신이 명시 적으로 지시 한대로 코드를 생성하는 것입니다. 원한다면'int * p'로 캐스팅하고'* p = 1; '이라고 쓰면 동작은 ** undefined **처럼됩니다. – WhozCraig

+0

필자는 [ideone] (http://ideone.com/avSl8H)에서 이것을 시도했으며 성공적으로 –

답변

2

함수 인수는 플랫폼의 ABI에 따라 레지스터 나 스택으로 전달됩니다. 인수를 지정하지 않으면 레지스터 또는 스택의 임의의 임의의 값이 호출 된 함수의 뷰에서 계속 남아 있습니다.

+0

도 실행합니다. 또한이 인수는 반환시 실수로 튀어 나옵니다. –