728x90
생소한 문법으로 적혀있는 코드를 보고 무엇인지 따라 추적하다가 void (*함수포인터)()라는 것을 알았다.
간단한 테스팅 소스코드를 작성해보았고 밑에 예시는 '실전'이다.
#include <stdio.h>
int add(int a, int b)
{
return a+b;
}
int mul(int a, int b)
{
return a*b;
}
int main()
{
int (*fp)(int, int);
fp = add;
printf("%d\n", fp(10,20)); // 30 출력
fp = mul;
printf("%d\n", fp(10,20)); // 120 출력
}
a.out
#define MAX_TR 100
typedef int (*TrFunc)(char *, char *); // 함수포인터(fp)의 별칭 설정
typedef struct
{
int iTrCode;
TrFunc pTrFunc; // 함수포인터 별칭을 구조체 멤버 자료형으로 사용
} TR_FUNC_ST;
int Tr1004 (char *, char *); // 각 tr의 기능 구현
int Tr1005 (char *, char *);
TR_FUNC_ST gtQATrFunc[MAX_TR] =
{ // 개발 완료한 tr 등록
{1005, Tr1005},
{1004, Tr1004},
{-1, NULL}
};
TrFunc Get_Tr_Func (TR_FUNC_ST *pptTrFunc, int piMaxTrFunc, int piTrCode);
int main()
{
int ret;
TrFunc pTrFunc; // 함수 포인터 별칭으로 변수 선언
char *InBuf;
char *OuBuf;
if ((pTrFunc = Get_Tr_Func (gtQATrFunc, MAX_TR, 1005)) == NULL) // 함수포인터에 담았고
{
}
ret = pTrFunc (InBuf, OuBuf); // 실행
printf("ret = %d\n", ret);
}
TrFunc Get_Tr_Func (TR_FUNC_ST *pptTrFunc, int piMaxTrFunc, int piTrCode)
{
int i;
int iFind = 0;
for (i = 0; i < piMaxTrFunc; i++, pptTrFunc++)
{
if (piTrCode == pptTrFunc->iTrCode)
{
iFind = 1;
break;
}
// Last
if (-1 == pptTrFunc->iTrCode)
break;
}
if (iFind == 1)
return pptTrFunc->pTrFunc;
return NULL;
}
int Tr1005 (char *in, char *out)
{
printf("Tr1005 test\n");
}
int Tr1004 (char *in, char *out)
{
printf("Tr1004 test\n");
}
728x90
'개발 업무(코딩)-개발자였을때 썼던..' 카테고리의 다른 글
vim color 편집하기 (0) | 2023.01.08 |
---|---|
파이썬(python) 크롤링(crawling) 간단 예제(코로나 확진자수 확인) (0) | 2023.01.08 |
TR전문 자르는 방식 예제(많이 쓰는 형태여서 예시코드 작성) (0) | 2023.01.08 |
c와 mariadb 연결하는 방법 및 예제 3 - insert+update 한번에 (0) | 2023.01.08 |
c언어 리눅스(linux) 디렉토리 열기(opendir) & stat 간단 예제 (0) | 2023.01.08 |