void *에 구조체를 넘기기에 대한 질문입니다.
글쓴이: 초코리 / 작성시간: 수, 2004/02/11 - 11:36오전
void *에 구조체를 넘길때 계속 컴파일 에러가 나서 질문드립니다.
typedef struct{ int b; }STRUCT_TYPE; void test_func(void * d){ int a; a = (STRUCT_TYPE)d->b; }
이렇게 쓰면 컴파일시에 void *는 구조체나 공용체가 아니라 라는 에러가 나더군요. 타입 캐스팅해서 쓰면 될것 같은데 안되었습니다.
typedef struct{ int b; }STRUCT_TYPE; void test_func(STRUCT_TYPE * d){//void *를 인자로 받은 다름 함수에서넘어옴 int a; a = d->b; }
이렇게 쓰면 컴파일 이상없이 잘돌아 가는데요. 처음 방법처럼 타입 캐스팅 해서 쓰는 방법은 없는지 알고 싶습니다.
그리고 질문 한가지더 있습니다.
(void)(fn *)(int,short,void *)로 받는 인자로 함수가 있습니다.
event_set(struct event *ev, int fd, short event, void (*fn)(int, short, void *), void *arg);
위와 같은 함수가 그런데요 저기서
(void)(fn *)(int,short,void *)를 (void)(fn*)(int,short,struct *) 이런함수를 사용하니 인자가 틀리다고 경고가 나더군요..
그래서 타입캐스팅을 하여 넘기려 하는데 어떤방식으로 타입캐스팅을 하면될까요 ...
전그냥 ((void)(*)(int,short,struct *)) func 라고 썼는데 에러가 나더군요..
Forums:
a = (STRUCT_TYPE)d->b; 별이 빠졌네요.
a = (STRUCT_TYPE)d->b;
별이 빠졌네요.
a = (STRUCT_TYPE*)d->b;
그리고,
((void)(*)(int,short,struct *)) 이건... struct 다음에 구분자가 없으니 문법 에러에 일단 걸리겠네요.
그리고 받는 쪽 함수 포인터의 마지막 인자는 void* 이니까 그냥
((void)(*)(int,short,void *)) 이걸로 캐스팅하시면 되지 않을까요?
그리고 함수 포인터는 왠만하면 typedef로 하시는게 보기도 좋고 이해하기도 좋습니다.
그럼, 이만...
답변 감사드립니다. 실제로 간단하게 만들어서 테스트 하고 있는 코
답변 감사드립니다. 실제로 간단하게 만들어서 테스트 하고 있는
코드 입니다.
bugiii님 께서 이야기 해주신데로도 해봤었는데 계속 에러가 나네요.
저렇게 일단 넘기고 캐스팅하면 안되나요??
그리고
이렇게 해봤지만 여전히 에러가 나네요....
[code:1] a = (STRUCT_TYPE*&
일단 다른 내용은 그만 두더라도 9라인을 아래와 같이 바꾸어 줘야 할것
같습니다
- advanced -
[quote="Advanced"][code:1] a =
그냥
이렇게 하면 될줄 알았는데 전체를 묶어
줘야 하는군요.
답변 감사합니다. 점심 시간이네요.. 점심 맛있게 드세요
..
댓글 달기