2009-04-05 5 views
9

함수 포인터를 인수로 취하는 C 함수가 있습니다.이 함수는 프로그램 끝에서 호출 할 소멸자입니다. 여기 내 함수의 프로토 타입입니다 :C : 함수 포인터와 typedef 문제

int store_dest(void (*routine)(void *)); 

다른 정보가있는 구조에이 함수 포인터를 저장하고 싶습니다. 좋은 구조체를 갖기 위해서이 함수 포인터에 typedef를 갖고 싶습니다. 여기 내 타입 정의입니다 : 여기

typedef void (*my_destructor)(void *); 

그리고 것은 내 구조입니다 : 내가 내 함수에 '도착'필드를 설정하고자하는 초기화 단계에서

typedef struct my_struct{ 
    my_destructor dest; 
    other_info ... 
} my_struct; 

, 여기의 프로토 타입입니다 이 기능 : I가 "my_dummy_dest"내 구조의 '도착'필드를 설정하려고 할 때

void* my_dummy_dest(void* foo); 

문제 (그냥 경고하지만 난 그것을 억제하고 싶습니다의 사실)가 발생합니다 :

난 그냥 그들을 비교할 때

같은 : "호환되지 않는 포인터 유형에서 할당 경고": 나는 "경고 얻을

if (my_struct.dest == &my_dummy_dest) 

: 별개의 포인터 타입의 비교를 캐스팅 부족

my_struct.dest = &my_dummy_dest; 

는 내가 얻을 "

그러나"dest "필드를 다른 루틴으로 설정하면 경고 메시지가 표시되지 않습니다. 나는 왜 나는 그 경고가 있는지 알지 못한다.

답변

11

더미 소멸자가 공백이 아닌 포인터을 반환하도록 선언되었습니다. 이 선언은 소멸자 함수 포인터의 typedef와 일치하지 않습니다.

+0

oups가되어야합니다. 나는 그걸 어리석은 짓이라고 생각했습니다. :) – claf

5

typedef입니다은 다음과 같아야합니다

typedef void *(*my_destructor)(void *); 
5

을 my_dummy_test 무효 대신 무효 * 을 반환하기 때문에. void *를 반환하려면 typedef가

typedef void* (*my_destructor)(void *);