문제

기능 포인터를 인수로 취하는 C 함수가 있습니다. 프로그램이 끝날 때 전화 할 수있는 소멸자입니다. 내 기능의 프로토 타입은 다음과 같습니다.

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

이 기능 포인터를 다른 정보를 가진 구조에 저장하고 싶습니다. 멋진 구조물을 갖기 위해서는이 기능 포인터에 대한 typedef를 원합니다. 여기 내 typedef가 있습니다.

typedef void (*my_destructor)(void *);

그리고 여기 내 구조가 있습니다.

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

초기화 단계에서 "DEST"필드를 내 함수로 설정하려고합니다. 다음은이 기능의 프로토 타입입니다.

void* my_dummy_dest(void* foo);

문제는 (실제로 경고 일 뿐이지 만 그것을 억제하고 싶습니다) 내 구조의 "dest"필드를 "my_dummy_dest"로 설정하려고 할 때 발생합니다.

my_struct.dest = &my_dummy_dest;

"경고 : 호환되지 않는 포인터 유형의 과제"를 얻습니다.

그냥 비교할 때도 마찬가지입니다.

if (my_struct.dest == &my_dummy_dest)

"경고 : 독특한 포인터 유형의 비교는 캐스트가 부족합니다"

그러나 다른 루틴으로 "dest"필드를 설정할 때 경고가 없습니다. 왜 그 경고가 있는지 알지 못합니다.

도움이 되었습니까?

해결책

당신의 더미 소멸자는 공허를 반환하도록 선언되었습니다 바늘, 공허가 아닙니다. 이 선언은 Destructor 함수 포인터의 typedef와 일치하지 않습니다.

다른 팁

typedef는 다음과 같아야합니다.

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

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

typedef void* (*my_destructor)(void *);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top