2009-05-03 2 views
10

예 : 함수 (즉, ...)와 int를 취하는 함수와 int를 취하는 함수.고유 한 형식의 함수를 인수로 사용하는 함수 포인터를 typedef 할 수 있습니까?

여기에는 (...)이 재귀 적으로 폭발합니다. 이 작업을 수행 할 수 없거나 다른 구문이 존재한다는 근본적인 이유가 있습니까? 그것은 캐스팅없이 가능해야합니다. 나는 파견 테이블을 지나가려고 정말로 노력하고 있지만,이 하나의 타입을 통과시킬 수 있다면 그것을 알아낼 수 있습니다.

+0

가변 인수가 재귀 적으로 폭발하는지, 아니면 "vararg"가 실제로 이전 인수를 지정하지 않고 "vararg"로 해석 되는가? –

+0

나는 거의 똑같은 질문을 봤지만 찾을 수가 없다. –

+0

http://stackoverflow.com/q/793449/10396 – AShelly

답변

10

당신은 구조체에 함수 포인터를 포장 할 수 있습니다

struct fnptr_struct; 
typedef void (*fnptr)(struct fnptr_struct *); 
struct fnptr_struct { 
    fnptr fp; 
}; 

잘 모르겠어요이 주조를 개선 인 경우. 나는 그것이 구조체 없이는 불가능하다고 생각한다. 왜냐하면 C는 타입이 정의되기 전에 정의되어야하고 typedef에 대해서는 불투명 한 구문이 없기 때문이다.

+0

좋은 해결 방법이 있습니다, 슬픈 "그냥"작동하지 않습니다. 아, 유산. : - / – HostileFork

6

직접 할 수 없습니다. 유일한 옵션은 함수 포인터 인수가 지정되지 않은 인수를 허용하거나 함수 포인터를 포함하는 구조체에 대한 포인터를 Dave suggested으로 허용하는 것입니다.

// Define fnptr as a pointer to a function returning void, and which takes one 
// argument of type 'pointer to a function returning void and taking 
// an unspecified number of parameters of unspecified types' 
typedef void (*fnptr)(void (*)()); 
관련 문제