#include
#include
typedef struct{
unsigned char u08Port;
void (*pFunc)(void);
}ADC_CONTROL_BUF;
void testFunc(void){
printf("bing go\n");
}
void main(){
ADC_CONTROL_BUF* pBuf;
void (*pFuncLocal)(void);
pBuf = (ADC_CONTROL_BUF*)malloc(sizeof(char) + sizeof(int));
pBuf->u08Port = NULL;
pBuf->pFunc = &(testFunc);
pFuncLocal = pBuf->pFunc;
pFuncLocal();
}
void(*pFuncLocal)(void)와 같이 함수의 prototype을 정의해 주고 func. pointer로 넘겨받아 사용할 수 있는 듯 하다.
조금 더 살펴보았다.(07년 4월 11일)
#include
class PCTask{
public:
PCTask() {};
~PCTask() {};
};
void (*BALCallback)(PCTask* pPCTask, int num){ (1)
printf("BALCallback\n");
}
int RegisterConnTerminated(void(* Callback)(PCTask*, int)){
void (* pFunc)(PCTask*, int);
pFunc = Callback;
PCTask* pTask = new PCTask();
pFunc(pTask, 0);
delete pTask;
return 1;
}
int main(void){
RegisterConnTerminated(BALCallback);
return 1;
}
위의 프로그램은 error를 발생시킨다. (1)에서 오류가 있는 듯 하다.
#include
class PCTask{
public:
PCTask() {};
~PCTask() {};
};
void BALCallback(PCTask* pPCTask, int num)
{
printf("BALCallback\n");
}
int RegisterConnTerminated(void Callback(PCTask*, int)){
void (* pFunc)(PCTask*, int); (2)
pFunc = &(Callback);
PCTask* pTask = new PCTask();
pFunc(pTask, 0);
delete pTask;
return 1;
}
int main(void){
RegisterConnTerminated(&BALCallback);
return 1;
}
위의 프로그램은 정상 동작된다. (2)에서 void* pFunc하는 것과 void (*pFunc)는 다른다.
6/28
매번 부닥칠때마다 어렵게 느껴진다. 오늘 다시 정래해 본다.
자, 아래 문장을 읽어보고...
C/C++ 에서 복잡한 typedef 중 가장 현실적이고 많이 사용하는것은 일반적인 형태의 함수 포인터입니다.
가령 typedef char (*A) (void ); 와 같은것이죠.
아래 사이트도 참고를 해 본다.
http://cafe.naver.com/lifree0.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=23
http://cafe.naver.com/devctrl.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=3903
아래는 시험적으로 작성해본 프로그램이다. 첫번째 프로그램이다.
#include
typedef void (callback)(int arg1);
void func1(int arg1)
{
printf("arg1 = %d\n", arg1);
}
int set_callback(callback arg1)
{
arg1(1);
return 1;
}
int main()
{
set_callback(func1);
return 1;
}
두번째 프로그램이다.
#include
typedef char (callback)(int arg1);
char func1(int arg1)
{
printf("arg1 = %d\n", arg1);
return (char)'a';
}
int set_callback(callback arg1)
{
arg1(1);
return 1;
}
int main()
{
set_callback(func1);
return 1;
}
세번째 프로그램이다.
#include
typedef char (*callback)(int arg1);
char func1(int arg1)
{
printf("arg1 = %d\n", arg1);
return (char)'a';
}
int set_callback(callback arg1)
{
arg1(1);
return 1;
}
int main()
{
set_callback(func1);
return 1;
}
아직 정확한 개념을 정립하지는 못하였으나 어렴풋이 이해를 하고 사용을 할 수는 있을 듯 하다.
'Papers > programming' 카테고리의 다른 글
struct pointer (0) | 2007.06.12 |
---|---|
enum (0) | 2007.05.16 |
typedef, callback (0) | 2007.03.17 |
정수형 포인터 초기화 (0) | 2007.02.28 |
소멸자를 가상함수로 쓰는 이유 (0) | 2007.02.12 |