📌 함수 포인터 활용
고속 처리
int main(void)
{
int instructions[1024] = { 0 };
int pc = 0;
while (instructions[pc])
{
switch (instructions[pc])
{
case 1: //add
break;
case 2: //sub
break;
case 3: //mul
break;
case 4: //div
break;
default:
break;
}
pc++;
}
return 0;
}
위 코드는 instructions 배열 안에 있는 값에 따라 switch - case로 분기를 해 함수를 실행하는 구조문이다.
instructions 배열 안에 값이 1일 경우, add를 호출해 빠르게 처리할 수 있지만
만약 항목이 더 많아져서 배열안의 값이 1000일 경우 ( 물론 지금은 default로 처리 되지만 )
1000까지 비교해가면서 함수를 실행해야하기 때문에 속도가 느려진다.
이때 함수포인터 배열을 활용해 구조를 바꾸면 보다 빠르게 함수를 실행할 수 있어진다.
#include<stdio.h>
typedef struct MyParams {
int param1;
int param2;
int param3;
} MYPARAMS;
int (*g_op_list[5])(MYPARAMS*); // 함수 포인터 배열
int add(MYPARAMS* pParam)
{
return pParam->param1 + pParam->param2 + pParam->param3;
}
int sub(MYPARAMS* pParam)
{
return pParam->param1 - pParam->param2 - pParam->param3;
}
int mul(MYPARAMS* pParam)
{
return pParam->param1 * pParam->param2 * pParam->param3;
}
int div(MYPARAMS* pParam)
{
return pParam->param1 / pParam->param2 / pParam->param3;
}
void init_op_list(void)
{
g_op_list[1] = add;
g_op_list[2] = sub;
g_op_list[3] = mul;
g_op_list[4] = div;
}
int main(void)
{
init_op_list();
int instructions[1024] = { 0 };
int pc = 0;
MYPARAMS param = { 0 };
while (instructions[pc])
{
g_op_list[instructions[pc]](¶m);
pc++;
}
return 0;
}
위 처럼 switch - case 구문을 삭제하고 g_op_list 함수 포인터 배열을 활용해 직접적으로 해당 함수를 빠르게 호출해 줄 수 있다.