[완료] 구조체 안에서의 함수 포인터.
글쓴이: zipsinworm / 작성시간: 금, 2007/04/27 - 11:50오전
여러 소스를 보다보면 예를들어.
typedef struct _LIB_HANDLE_
{
.....
.....
.....
T_ALLOC Alloc;
DE_ALLOC Dealloc;
}
LIBHANDLE ;
이런 구조체가 있습니다. 궁금한건 T_ALLOC과 DE_ALLOC 입니다.
따라가서 찾아보니
typedef void* (*T_ALLOC)(unsigned long);
typedef void (*DE_ALLOC)(void*);
이렇게 정의가 되어 있었습니다.
제가 생각하기에는 함수포인터를 사용하는거 같은데 그럴려면 T_ALLOC함수와 DE_ALLOC함수가
존재 해야 하지 않나 생각됩니다. 근데 아무리 찾아봐도 위에 두 함수는 찾아볼 수가 없었습니다.
어떤 의미로 이 구조체를 쓰고 '') 저렇게 정의 하여 사용하는지 이해가 잘 안갑니다.
이런 문법도 존재하는지요..? 궁금합니다.
Forums:
Alloc와 Dealloc 두
Alloc와 Dealloc 두 변수가 가리키는 함수의 이름이 꼭 T_ALLOC 혹은 DE_ALLOC일 필요는 없습니다.
void * func(unsigned long ul)
void func(void * p)
이런 형태를 갖는 함수 모두를 가리킬 수 있습니다. 매개변수와 함수의 이름은 뭐든지 상관이 없습니다.
이런 말씀 드리면 실례가 될지 모르겠습니다만,
함수 포인터와 typedef에 대해서 아직 제대로 이해하지 못하신 듯 합니다.
책보고 기초 문법부터 다시 공부하세요.
쓰시는 C언어
쓰시는 C언어 매뉴얼에서 typedef 관련 부분을 찬찬히 읽어 보시기 바랍니다.
함수 프로토타입 선언에 대해 잘 기술 되어 있을 것입니다.
typedef void voidfn ();
voidfn fatal;
이런식의 이용이 가능 하지요.
![](http://services.nexodyne.com/email/icon/taulvObFfQ%3D%3D/J7Clg18%3D/R01haWw%3D/0/image.png)
그렇다면...
매개변수와 함수이름이 전혀 상관 없고 반환형이랑 매개변수 형만 같다라면 된다는건데 저런 구조체를 쓰는 이유는 뭘까요?
동적으로 필요한
동적으로 필요한 함수를 등록해서 사용하기 위해서 사용합니다.
콜백이나 플러그인과 같은 효과를 줄 때 유용합니다.
예를 들어 미디어 플레이어의 경우
이런식의 구조체를 정의해놓고 미디어 플레이어 초기화 시 각 코덱 dll에 있는 코덱 함수를 저 구조체 테이블에 등록시키면 나중에 파일의 타입을 확인해서 해당 코덱 타입에 맞는 함수를 호출하는 용도로 사용할 수 있습니다.
http://agbird.egloos.com
------------------------
http://agbird.egloos.com
잘 알겠습니다~
그렇군요. 어떤 여러 파일이 있다고 해서 각각 개별적으로 처리하는 것이 아니라 저런 구조를 이용함으로써 동적으로 핸들링 할 수 있군요.
감사합니다. 덕분에 정말 중요한 것을 알았습니다~ ^^
댓글 달기